(.module: [library [lux "*" ["_" test {"+" [Test]}] [abstract [monad {"+" [do]}] [\\specification ["$." equivalence]]] [control ["." try ("#\." functor)] [parser ["<.>" text]]] [time ["." instant ("#\." equivalence)]] [math ["." random {"+" [Random]}] [number ["i" int]]]]] [\\program ["." /]] ["." / "_" ["#." date] ["#." time]]) (def: .public random (Random /.Time) (do random.monad [date /date.random time /time.random] (in [date time]))) (def: .public test Test (<| (_.covering /._) (_.for [/.Time]) ($_ _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (do random.monad [expected ..random] (_.cover [/.format /.parser] (|> expected /.format (.result /.parser) (try\each (\ /.equivalence = expected)) (try.else false)))) (do random.monad [expected ..random] (_.cover [/.instant /.of_instant] (|> expected /.instant /.of_instant (try\each (\ /.equivalence = expected)) (try.else false)))) (_.cover [/.epoch] (instant\= instant.epoch (/.instant /.epoch))) /date.test /time.test )))