(.using [library [lux "*" ["_" test {"+" Test}] [abstract [monad {"+" do}] [\\specification ["$[0]" equivalence]]] [control ["[0]" try] ["<>" parser ["<[0]>" code]]] [math ["[0]" random {"+" Random}]] [macro ["[0]" code ("[1]#[0]" equivalence)]]]] [\\library ["[0]" /]] ["$[0]" /// "_" ["[1][0]" code]]) (def: .public random (Random /.Check) ($_ random.and $///code.random $///code.random )) (def: .public test Test (<| (_.covering /._) (_.for [/.Check]) ($_ _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (do random.monad [[type value] ..random] (_.cover [/.format /.parser] (case (.result /.parser (list (/.format [/.#type type /.#value value]))) {try.#Failure _} false {try.#Success check} (and (code#= type (the /.#type check)) (code#= value (the /.#value check)))))))))