(.module: [library [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)] [\\specification ["$." equivalence]]] [control ["." maybe ("#\." functor)]] [data ["." text ("#\." equivalence)] [collection ["." list ("#\." functor)] ["." set]]] [math ["." random (#+ Random) ("#\." monad)] [number ["n" nat]]]]] [\\program ["." /]]) (def: .public random (Random /.Runtime) ($_ random.either (random\in /.default_java) (random\in /.default_js) (random\in /.default_python) (random\in /.default_lua) (random\in /.default_ruby) )) (def: .public test Test (<| (_.covering /._) (_.for [/.Runtime]) (do random.monad [path (random.ascii/alpha 5) runtime ..random] (`` ($_ _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (~~ (template [] [(_.cover [/.default_java /.default_js /.default_python /.default_lua /.default_ruby] (let [listing (|> (list /.default_java /.default_js /.default_python /.default_lua /.default_ruby) (list\each (value@ #/.program))) unique (set.of_list text.hash listing)] (n.= (list.size listing) (set.size unique))))] [/.default_java] [/.default_js] [/.default_python] [/.default_lua] [/.default_ruby] )) (_.cover [/.for] (let [runtime' (/.for runtime path)] (and (text\= (value@ #/.program runtime) (value@ #/.program runtime')) (|> runtime' (value@ #/.parameters) list.last (maybe\each (text\= path)) (maybe.else false))))) )))))