(.module: [library [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)]] [control ["." try]] [math ["." random (#+ Random)]]]] [\\library ["." / [// [equivalence (#+ Equivalence)]]]]) (def: .public (spec (^open "@//.") (^open "@//.") generator) (All [m a] (-> (Equivalence a) (/.Codec m a) (Random a) Test)) (do random.monad [expected generator] (_.for [/.Codec] (_.test "Isomorphism." (case (|> expected @//encoded @//decoded) (#try.Success actual) (@//= expected actual) (#try.Failure _) false)))))