aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/locale/territory.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/test/lux/locale/territory.lux')
-rw-r--r--stdlib/source/test/lux/locale/territory.lux206
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
+ )))