(.module: [lux #* ["_" test (#+ Test)] [control [monad (#+ do)]] [data [text format]] [math ["r" random (#+ Random)]]] {1 ["." / (#+ Equivalence)]}) (def: #export (spec (^open "_@.") generator) (All [a] (-> (Equivalence a) (Random a) Test)) (do r.monad [left generator right generator] (<| (_.context (%name (name-of /.Equivalence))) ($_ _.and (_.test "Reflexivity." (_@= left left)) (_.test "Symmetry." (if (_@= left right) (_@= right left) (not (_@= right left))))))))