(.require [library [lux (.except) ["_" test (.only Test)] [abstract [monad (.only do)] [\\specification ["$[0]" equivalence]]] [control ["[0]" try (.use "[1]#[0]" functor)]] [data ["[0]" text ["<[1]>" \\parser]]] [math ["[0]" random (.only Random)] [number ["i" int]]] [world [time ["[0]" instant (.use "[1]#[0]" equivalence)]]]]] [\\program ["[0]" /]] ["[0]" / ["[1][0]" date] ["[1][0]" 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]) (all _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (do random.monad [expected ..random] (_.coverage [/.format /.parser] (|> expected /.format (.result /.parser) (try#each (at /.equivalence = expected)) (try.else false)))) (do random.monad [expected ..random] (_.coverage [/.instant /.of_instant] (|> expected /.instant /.of_instant (try#each (at /.equivalence = expected)) (try.else false)))) (_.coverage [/.epoch] (instant#= instant.epoch (/.instant /.epoch))) /date.test /time.test )))