(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)] {[0 #spec] [/ ["$." equivalence]]}] [control ["." try ("#\." functor)] [parser ["<.>" xml]]] [math ["." random (#+ Random)]]] {#program ["." /]}) (def: #export random (Random /.Versioning) ($_ random.and random.instant random.nat (random.list 5 (random.ascii/lower_alpha 3)) )) (def: #export test Test (<| (_.covering /._) (_.for [/.Versioning]) ($_ _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (do random.monad [expected ..random version (random.ascii/upper_alpha 3)] (_.cover [/.format /.parser] (|> expected (/.format version) (.run (/.parser version)) (try\map (\ /.equivalence = expected)) (try.default false)))) )))