diff options
Diffstat (limited to 'stdlib/source/test/lux/locale/territory.lux')
-rw-r--r-- | stdlib/source/test/lux/locale/territory.lux | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/stdlib/source/test/lux/locale/territory.lux b/stdlib/source/test/lux/locale/territory.lux new file mode 100644 index 000000000..43d4401ec --- /dev/null +++ b/stdlib/source/test/lux/locale/territory.lux @@ -0,0 +1,206 @@ +(.module: + [lux #* + ["_" test (#+ Test)] + [abstract + [monad (#+ do)] + [hash (#+ Hash)]] + [data + ["." text] + [number + ["n" nat]] + [collection + ["." set (#+ Set)] + ["." list ("#@." functor fold)]]] + [macro + ["." template]] + [math + ["." random]]] + {1 + ["." /]}) + +(type: Bundle + {#count Nat + #names (Set Text) + #shorts (Set Text) + #longs (Set Text) + #numbers (Set Nat) + #territories (Set /.Territory) + #test Test}) + +(template [<bundle> <territories>] + [(def: <bundle> + Bundle + (let [count (template.count <territories>) + territories (`` (list (~~ (template.splice <territories>))))] + {#count count + #names (|> territories (list@map /.name) (set.from-list text.hash)) + #shorts (|> territories (list@map /.short-code) (set.from-list text.hash)) + #longs (|> territories (list@map /.long-code) (set.from-list text.hash)) + #numbers (|> territories (list@map /.numeric-code) (set.from-list n.hash)) + #territories (|> territories (set.from-list /.hash)) + #test (_.cover <territories> + true)}))] + + [territories/a [/.afghanistan /.aland-islands /.albania /.algeria /.american-samoa + /.andorra /.angola /.anguilla /.antarctica /.antigua + /.argentina /.armenia /.aruba /.australia /.austria + /.azerbaijan]] + [territories/b [/.the-bahamas /.bahrain /.bangladesh /.barbados /.belarus + /.belgium /.belize /.benin /.bermuda /.bhutan + /.bolivia /.bonaire /.bosnia /.botswana /.bouvet-island + /.brazil /.british-indian-ocean-territory /.brunei-darussalam /.bulgaria /.burkina-faso + /.burundi]] + [territories/c [/.cape-verde /.cambodia /.cameroon /.canada /.cayman-islands + /.central-african-republic /.chad /.chile /.china /.christmas-island + /.cocos-islands /.colombia /.comoros /.congo /.democratic-republic-of-the-congo + /.cook-islands /.costa-rica /.ivory-coast /.croatia /.cuba + /.curacao /.cyprus /.czech-republic]] + [territories/d [/.denmark /.djibouti /.dominica /.dominican-republic]] + [territories/e [/.ecuador /.egypt /.el-salvador /.equatorial-guinea /.eritrea + /.estonia /.eswatini /.ethiopia]] + [territories/f [/.falkland-islands /.faroe-islands /.fiji /.finland /.france + /.french-guiana /.french-polynesia /.french-southern-territories]] + [territories/g [/.gabon /.the-gambia /.georgia /.germany /.ghana + /.gibraltar /.greece /.greenland /.grenada /.guadeloupe + /.guam /.guatemala /.guernsey /.guinea /.guinea-bissau + /.guyana]] + [territories/h [/.haiti /.heard-island /.honduras /.hong-kong + /.hungary]] + [territories/i [/.iceland /.india /.indonesia /.iran /.iraq + /.ireland /.isle-of-man /.israel /.italy]] + [territories/j [/.jamaica /.japan /.jersey /.jordan]] + [territories/k [/.kazakhstan /.kenya /.kiribati /.north-korea /.south-korea + /.kuwait /.kyrgyzstan]] + [territories/l [/.laos /.latvia /.lebanon /.lesotho /.liberia + /.libya /.liechtenstein /.lithuania /.luxembourg]] + [territories/m [/.macau /.macedonia /.madagascar /.malawi /.malaysia + /.maldives /.mali /.malta /.marshall-islands /.martinique + /.mauritania /.mauritius /.mayotte /.mexico /.micronesia + /.moldova /.monaco /.mongolia /.montenegro /.montserrat + /.morocco /.mozambique /.myanmar]] + [territories/n [/.namibia /.nauru /.nepal /.netherlands /.new-caledonia + /.new-zealand /.nicaragua /.niger /.nigeria /.niue + /.norfolk-island /.northern-mariana-islands /.norway]] + [territories/o [/.oman]] + [territories/p [/.pakistan /.palau /.palestine /.panama /.papua-new-guinea + /.paraguay /.peru /.philippines /.pitcairn-islands /.poland + /.portugal /.puerto-rico]] + [territories/q [/.qatar]] + [territories/r [/.reunion /.romania /.russia /.rwanda]] + [territories/s [/.saint-barthelemy /.saint-helena /.saint-kitts /.saint-lucia /.saint-martin + /.saint-pierre /.saint-vincent /.samoa /.san-marino /.sao-tome + /.saudi-arabia /.senegal /.serbia /.seychelles /.sierra-leone + /.singapore /.sint-maarten /.slovakia /.slovenia /.solomon-islands + /.somalia /.south-africa /.south-georgia /.south-sudan /.spain + /.sri-lanka /.sudan /.suriname /.svalbard /.sweden + /.switzerland /.syria]] + [territories/t [/.taiwan /.tajikistan /.tanzania /.thailand /.east-timor + /.togo /.tokelau /.tonga /.trinidad /.tunisia + /.turkey /.turkmenistan /.turks /.tuvalu]] + [territories/u [/.uganda /.ukraine /.united-arab-emirates /.united-kingdom /.united-states-of-america + /.united-states-minor-outlying-islands /.uruguay /.uzbekistan]] + [territories/v [/.vanuatu /.vatican-city /.venezuela /.vietnam /.british-virgin-islands /.united-states-virgin-islands]] + [territories/w [/.wallis /.western-sahara]] + [territories/y [/.yemen]] + [territories/z [/.zambia /.zimbabwe]] + ) + +(def: territories + (List Bundle) + (list ..territories/a + ..territories/b + ..territories/c + ..territories/d + ..territories/e + ..territories/f + ..territories/g + ..territories/h + ..territories/i + ..territories/j + ..territories/k + ..territories/l + ..territories/m + ..territories/n + ..territories/o + ..territories/p + ..territories/q + ..territories/r + ..territories/s + ..territories/t + ..territories/u + ..territories/v + ..territories/w + ..territories/y + ..territories/z)) + +(def: (aggregate lens hash territories) + (All [a] (-> (-> Bundle (Set a)) + (Hash a) + (List Bundle) + [Nat (Set a)])) + (list@fold (function (_ bundle [count set]) + [(n.+ count (get@ #count bundle)) + (set.union set (lens bundle))]) + [0 (set.new hash)] + territories)) + +(def: territories-test + Test + (|> ..territories + list.reverse + (list@map (get@ #test)) + (list@fold _.and + (`` ($_ _.and + (~~ (template [<lens> <tag> <hash>] + [(let [[count set] (..aggregate (get@ <tag>) <hash> ..territories)] + (_.cover [<lens>] + (n.= count (set.size set))))] + + [/.name #names text.hash] + [/.short-code #shorts text.hash] + [/.long-code #longs text.hash] + [/.numeric-code #numbers n.hash] + [/.equivalence #territories /.hash] + )) + ))))) + +(template: (!aliases <reference> <aliases>) + (_.cover <aliases> + (list.every? (:: /.equivalence = <reference>) + (`` (list (~~ (template.splice <aliases>))))))) + +(def: aliases-test + Test + ($_ _.and + ## A + (!aliases /.antigua [/.barbuda]) + ## B + (!aliases /.bonaire [/.sint-eustatius /.saba]) + (!aliases /.bosnia [/.herzegovina]) + ## H + (!aliases /.heard-island [/.mcdonald-islands]) + ## S + (!aliases /.saint-helena [/.ascension /.tristan-da-cunha]) + (!aliases /.saint-kitts [/.nevis]) + (!aliases /.saint-pierre [/.miquelon]) + (!aliases /.saint-vincent [/.the-grenadines]) + (!aliases /.sao-tome [/.principe]) + (!aliases /.south-georgia [/.south-sandwich-islands]) + (!aliases /.svalbard [/.jan-mayen]) + ## T + (!aliases /.trinidad [/.tobago]) + (!aliases /.turks [/.caicos-islands]) + ## U + (!aliases /.united-kingdom [/.northern-ireland]) + ## W + (!aliases /.wallis [/.futuna]) + )) + +(def: #export test + Test + (<| (_.covering /._) + (_.with-cover [/.Territory]) + ($_ _.and + ..territories-test + ..aliases-test + ))) |