(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)]] [control ["." try]] [math ["." random (#+ Random)]]] {1 ["." / [// [equivalence (#+ Equivalence)]]]}) (def: #export (spec (^open "/@.") (^open "/@.") generator) (All [m a] (-> (Equivalence a) (/.Codec m a) (Random a) Test)) (do random.monad [expected generator] (_.with-cover [/.Codec] (_.test "Isomorphism." (case (|> expected /@encode /@decode) (#try.Success actual) (/@= expected actual) (#try.Failure _) false)))))