(.using [library [lux "*" ["_" test {"+" Test}] [abstract [monad {"+" do}] [\\specification ["$[0]" equivalence]]] [control ["[0]" try] [parser ["<[0]>" code]]] [math ["[0]" random {"+" Random}] [number ["n" nat]]]]] [\\library ["[0]" /]]) (def: .public random (Random /.Declaration) (let [word (random.ascii/alpha 10)] ($_ random.and word (do [! random.monad] [size (# ! each (n.% 10) random.nat)] (random.list size word)) ))) (def: .public test Test (<| (_.covering /._) (_.for [/.Declaration]) ($_ _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (do random.monad [expected ..random] (_.cover [/.format /.parser] (case (.result /.parser (list (/.format expected))) {try.#Failure _} false {try.#Success actual} (# /.equivalence = expected actual)))))))