packages feed

numerals-0.4.1: src-test/Text/Numeral/Language/POR/TestData.hs

{-|
[@ISO639-1@]        pt

[@ISO639-2@]        por

[@ISO639-3@]        por

[@Native name@]     Português

[@English name@]    Portuguese
-}

module Text.Numeral.Language.POR.TestData (cardinals, ordinals) where


--------------------------------------------------------------------------------
-- Imports
--------------------------------------------------------------------------------

import "base" Control.Arrow ( second )
import "base" Data.Monoid ( (<>) )
import "numerals" Text.Numeral.Grammar
import "numerals" Text.Numeral.Misc ( dec )
import "this" Text.Numeral.Test ( TestData )
import "text" Data.Text ( Text )


--------------------------------------------------------------------------------
-- Test data
--------------------------------------------------------------------------------

-- Sources:
--   http://www.sonia-portuguese.com/text/numerals.htm
--   http://www.smartphrase.com/Portuguese/po_numbers_voc.shtml

base_cardinals :: (Integral i) => [(i, Text)]
base_cardinals =
  [ (0, "zero")
  , (3, "três")
  , (4, "quatro")
  , (5, "cinco")
  , (6, "seis")
  , (7, "sete")
  , (8, "oito")
  , (9, "nove")
  , (10, "dez")
  , (11, "onze")
  , (12, "doze")
  , (13, "treze")
  , (14, "catorze")
  , (15, "quinze")
  , (16, "dezasseis")
  , (17, "dezassete")
  , (18, "dezoito")
  , (19, "dezanove")
  , (20, "vinte")
  , (23, "vinte e três")
  , (24, "vinte e quatro")
  , (25, "vinte e cinco")
  , (26, "vinte e seis")
  , (27, "vinte e sete")
  , (28, "vinte e oito")
  , (29, "vinte e nove")
  , (30, "trinta")
  , (33, "trinta e três")
  , (34, "trinta e quatro")
  , (35, "trinta e cinco")
  , (36, "trinta e seis")
  , (37, "trinta e sete")
  , (38, "trinta e oito")
  , (39, "trinta e nove")
  , (40, "quarenta")
  , (43, "quarenta e três")
  , (44, "quarenta e quatro")
  , (45, "quarenta e cinco")
  , (46, "quarenta e seis")
  , (47, "quarenta e sete")
  , (48, "quarenta e oito")
  , (49, "quarenta e nove")
  , (50, "cinquenta")
  , (53, "cinquenta e três")
  , (54, "cinquenta e quatro")
  , (55, "cinquenta e cinco")
  , (56, "cinquenta e seis")
  , (57, "cinquenta e sete")
  , (58, "cinquenta e oito")
  , (59, "cinquenta e nove")
  , (60, "sessenta")
  , (63, "sessenta e três")
  , (64, "sessenta e quatro")
  , (65, "sessenta e cinco")
  , (66, "sessenta e seis")
  , (67, "sessenta e sete")
  , (68, "sessenta e oito")
  , (69, "sessenta e nove")
  , (70, "setenta")
  , (73, "setenta e três")
  , (74, "setenta e quatro")
  , (75, "setenta e cinco")
  , (76, "setenta e seis")
  , (77, "setenta e sete")
  , (78, "setenta e oito")
  , (79, "setenta e nove")
  , (80, "oitenta")
  , (83, "oitenta e três")
  , (84, "oitenta e quatro")
  , (85, "oitenta e cinco")
  , (86, "oitenta e seis")
  , (87, "oitenta e sete")
  , (88, "oitenta e oito")
  , (89, "oitenta e nove")
  , (90, "noventa")
  , (93, "noventa e três")
  , (94, "noventa e quatro")
  , (95, "noventa e cinco")
  , (96, "noventa e seis")
  , (97, "noventa e sete")
  , (98, "noventa e oito")
  , (99, "noventa e nove")
  , (100, "cem")
  , (105, "cento e cinco")
  , (125, "cento e vinte e cinco")
  , (138, "cento e trinta e oito")
  , (199, "cento e noventa e nove")
  , (1000, "mil")
  , (1008, "mil e oito")
  , (1985, "mil novecentos e oitenta e cinco")
  , (3000, "três mil")
  , (10000, "dez mil")
  , (100000, "cem mil")
  , (125000, "cento e vinte e cinco mil")
  , (735346, "setecentos e trinta e cinco mil trezentos e quarenta e seis")
  , (dec 6, "um milhão")
  , (2 * dec 6, "dois milhões")
  , (dec 7, "dez milhões")
  , (dec 9, "um bilhão")
  , (dec 10, "dez bilhões")
  , (dec 12, "um trilhão")
  , (dec 13, "dez trilhões")
  , (dec 15, "um quatrilhão")
  , (dec 18, "um quintilhão")
  , (dec 21, "um sextilhão")
  , (dec 24, "um septilhão")
  , (dec 27, "um octilhão")
  , (dec 30, "um nonilhão")
  , (dec 33, "um decilhão")
  , (dec 36, "um undecilhão")
  , (dec 39, "um duodecilhão")
  , (dec 42, "um tredecilhão")
  , (dec 100, "dez duotrigintilhões")
  ]

cardinals :: (Integral i) => TestData i
cardinals =
  [ ( "masculine"
    , masculine defaultInflection
    , base_cardinals
      <> [ (1, "um")
        , (2, "dois")
        , (21, "vinte e um")
        , (22, "vinte e dois")
        , (31, "trinta e um")
        , (32, "trinta e dois")
        , (41, "quarenta e um")
        , (42, "quarenta e dois")
        , (51, "cinquenta e um")
        , (52, "cinquenta e dois")
        , (61, "sessenta e um")
        , (62, "sessenta e dois")
        , (71, "setenta e um")
        , (72, "setenta e dois")
        , (81, "oitenta e um")
        , (82, "oitenta e dois")
        , (91, "noventa e um")
        , (92, "noventa e dois")
        , (101, "cento e um")
        , (200, "duzentos")
        , (234, "duzentos e trinta e quatro")
        , (250, "duzentos e cinquenta")
        , (300, "trezentos")
        , (330, "trezentos e trinta")
        , (375, "trezentos e setenta e cinco")
        , (400, "quatrocentos")
        , (467, "quatrocentos e sessenta e sete")
        , (500, "quinhentos")
        , (600, "seiscentos")
        , (700, "setecentos")
        , (800, "oitocentos")
        , (900, "novecentos")
        , (2000, "dois mil")
        , (200000, "duzentos mil")
        , (500000, "quinhentos mil")
        , (100001, "cem mil e um")
        , (101000, "cento e um mil")
        , (1537469, "um milhão quinhentos e trinta e sete mil quatrocentos e sessenta e nove")
        ]
    )
  , ( "feminine"
    , feminine defaultInflection
    , base_cardinals
      <> [ (1, "uma")
        , (2, "duas")
        , (21, "vinte e uma")
        , (22, "vinte e duas")
        , (31, "trinta e uma")
        , (32, "trinta e duas")
        , (41, "quarenta e uma")
        , (42, "quarenta e duas")
        , (51, "cinquenta e uma")
        , (52, "cinquenta e duas")
        , (61, "sessenta e uma")
        , (62, "sessenta e duas")
        , (71, "setenta e uma")
        , (72, "setenta e duas")
        , (81, "oitenta e uma")
        , (82, "oitenta e duas")
        , (91, "noventa e uma")
        , (92, "noventa e duas")
        , (101, "cento e uma")
        , (200, "duzentas")
        , (234, "duzentas e trinta e quatro")
        , (250, "duzentas e cinquenta")
        , (300, "trezentas")
        , (330, "trezentas e trinta")
        , (375, "trezentas e setenta e cinco")
        , (400, "quatrocentas")
        , (467, "quatrocentas e sessenta e sete")
        , (500, "quinhentas")
        , (600, "seiscentas")
        , (700, "setecentas")
        , (800, "oitocentas")
        , (900, "novecentas")
        , (2000, "duas mil")
        , (200000, "duzentas mil")
        , (500000, "quinhentas mil")
        , (100001, "cem mil e uma")
        , (101000, "cento e uma mil")
        , (1537469, "um milhão quinhentas e trinta e sete mil quatrocentas e sessenta e nove")
        ]
    )
  ]

-- These are the base forms of the ordinals, stripped of their
-- ending. Append "o", "os", "a" or "as" to form combinations of
-- masculine, feminine, singular and plural ordinals.
base_ordinals :: (Integral i) => [(i, Text)]
base_ordinals =
  [ (1, "primeir")
  , (2, "segund")
  , (3, "terceir")
  , (4, "quart")
  , (5, "quint")
  , (6, "sext")
  , (7, "sétim")
  , (8, "oitav")
  , (9, "non")
  , (10, "décim")
  , (11, "décimo primeir")
  , (12, "décimo segund")
  , (13, "décimo terceir")
  , (20, "vigésim")
  , (21, "vigésimo primeir")
  , (30, "trigésim")
  , (40, "quadragésim")
  , (50, "qüinquagésim")
  , (60, "sexagésim")
  , (70, "septuagésim")
  , (80, "octogésim")
  , (90, "nonagésim")
  , (100, "centésim")
  , (200, "ducentésim")
  , (300, "trecentésim")
  , (400, "quadringentésim")
  , (500, "qüingentésim")
  , (600, "sexcentésim")
  , (700, "setingentésim")
  , (800, "octingentésim")
  , (900, "nongentésim")
  , (1000, "milésim")
  ]

ordinals :: (Integral i) => TestData i
ordinals = map (\(n, f, e) -> ( n
                             , f defaultInflection
                             , map (second (<> e)) base_ordinals)
                             )
               [ ("masculine singular", masculine . singular, "o")
               , ("masculine plural",   masculine . plural,   "os")
               , ("feminine singular",  feminine  . singular, "a")
               , ("feminine plural",    feminine  . plural,   "as")
               ]