(.require [library [lux (.except) [abstract [monad (.only do)]] [math ["[0]" random (.only Random)]] [test ["_" property (.only Test)]]]] [\\library ["[0]" /]] [// ["[0]S" order]]) (def .public (spec (open "/#[0]") random) (All (_ a) (-> (/.Enum a) (Random a) Test)) (do random.monad [sample random] (<| (_.for [/.Enum]) (all _.and (_.for [/.order] (orderS.spec /#order random)) (_.coverage [/.succ /.pred] (and (/#= (|> sample /#succ /#pred) sample) (/#= (|> sample /#pred /#succ) sample) (not (/#= (/#succ sample) sample)) (not (/#= (/#pred sample) sample)))) ))))