(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)]] [math ["." random (#+ Random)]]] {1 ["." / (#+ Equivalence)]}) (def: #export (spec (^open "_@.") generator) (All [a] (-> (Equivalence a) (Random a) Test)) (do random.monad [left generator right generator] (<| (_.with-cover [/.Equivalence]) ($_ _.and (_.test "Reflexivity." (_@= left left)) (_.test "Symmetry." (if (_@= left right) (_@= right left) (not (_@= right left))))))))