(.using [library [lux "*" ["_" test {"+" Test}] [abstract [monad {"+" do}]] [data ["[0]" bit ("[1]#[0]" equivalence)]] [math ["[0]" random {"+" Random}] [number ["n" nat]]]]] [\\library ["[0]" /]]) (def: .public test Test (<| (_.covering /._) (_.for [/.Arity]) (do [! random.monad] [arity (# ! each (n.% 3) random.nat)] ($_ _.and (_.cover [/.nullary?] (bit#= (n.= 0 arity) (/.nullary? arity))) (_.cover [/.unary?] (bit#= (n.= 1 arity) (/.unary? arity))) (_.cover [/.multiary?] (bit#= (n.>= 2 arity) (/.multiary? arity))) ))))