aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/world/locale/territory.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/test/lux/world/locale/territory.lux')
-rw-r--r--stdlib/source/test/lux/world/locale/territory.lux227
1 files changed, 227 insertions, 0 deletions
diff --git a/stdlib/source/test/lux/world/locale/territory.lux b/stdlib/source/test/lux/world/locale/territory.lux
new file mode 100644
index 000000000..969fe32a1
--- /dev/null
+++ b/stdlib/source/test/lux/world/locale/territory.lux
@@ -0,0 +1,227 @@
+(.require
+ [library
+ [lux (.except)
+ ["_" test (.only Test)]
+ [abstract
+ [monad (.only do)]
+ [hash (.only Hash)]
+ [\\specification
+ ["$[0]" hash]]]
+ [control
+ ["[0]" maybe]]
+ [data
+ ["[0]" text]
+ [collection
+ ["[0]" set (.only Set)]
+ ["[0]" list (.use "[1]#[0]" functor mix)]]]
+ [math
+ ["[0]" random (.only Random)]
+ [number
+ ["n" nat]]]
+ [meta
+ [macro
+ ["[0]" template]]]]]
+ [\\library
+ ["[0]" /]])
+
+(type Bundle
+ (Record
+ [#amount Nat
+ #names (Set Text)
+ #shorts (Set Text)
+ #longs (Set Text)
+ #numbers (Set Nat)
+ #territories (Set /.Territory)
+ #test Test]))
+
+(with_template [<bundle> <territories>]
+ [(def <bundle>
+ Bundle
+ (let [amount (template.amount <territories>)
+ territories (`` (list (,, (template.spliced <territories>))))]
+ [#amount amount
+ #names (|> territories (list#each /.name) (set.of_list text.hash))
+ #shorts (|> territories (list#each /.short_code) (set.of_list text.hash))
+ #longs (|> territories (list#each /.long_code) (set.of_list text.hash))
+ #numbers (|> territories (list#each /.numeric_code) (set.of_list n.hash))
+ #territories (|> territories (set.of_list /.hash))
+ #test (_.coverage <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#mix (function (_ bundle [amount set])
+ [(n.+ amount (the #amount bundle))
+ (set.union set (lens bundle))])
+ [0 (set.empty hash)]
+ territories))
+
+(def territories_test
+ Test
+ (|> ..territories
+ list.reversed
+ (list#each (the #test))
+ (list#mix _.and
+ (`` (all _.and
+ (,, (with_template [<lens> <tag> <hash>]
+ [(let [[amount set] (..aggregate (the <tag>) <hash> ..territories)]
+ (_.coverage [<lens>]
+ (n.= amount (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]
+ ))
+ )))))
+
+(def !aliases
+ (template (_ <reference> <aliases>)
+ [(_.coverage <aliases>
+ (list.every? (at /.equivalence = <reference>)
+ (`` (list (,, (template.spliced <aliases>))))))]))
+
+(def aliases_test
+ Test
+ (all _.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 .public random
+ (Random /.Territory)
+ (let [options (|> ..territories
+ (list#each (|>> (the #territories) set.list))
+ list.together)]
+ (do [! random.monad]
+ [choice (at ! each (n.% (list.size options))
+ random.nat)]
+ (in (maybe.trusted (list.item choice options))))))
+
+(def .public test
+ Test
+ (<| (_.covering /._)
+ (_.for [/.Territory])
+ (all _.and
+ (_.for [/.hash]
+ ($hash.spec /.hash ..random))
+
+ ..territories_test
+ ..aliases_test
+ )))