(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)] {[0 #spec] [/ ["$." equivalence]]}] [control ["." try ("#\." functor)] [parser ["<.>" xml]]] [math ["." random (#+ Random) ("#\." monad)]]] ["$." / #_ ["#." build] ["#." stamp] ["#." time] ["#." version]] {#program ["." /]}) (def: #export random (Random /.Snapshot) (random.or (random\wrap []) $/stamp.random)) (def: #export test Test (<| (_.covering /._) (_.for [/.Snapshot] ($_ _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (do random.monad [expected ..random] (_.cover [/.format /.parser] (|> expected /.format list (.run /.parser) (try\map (\ /.equivalence = expected)) (try.default false)))) $/build.test $/stamp.test $/time.test $/version.test ))))