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