(.require [library [lux (.except) ["_" test (.only Test)] [abstract [monad (.only do)] [\\specification ["$[0]" equivalence]]] [control ["[0]" maybe (.use "[1]#[0]" functor)]] [data ["[0]" text (.use "[1]#[0]" equivalence)] [collection ["[0]" list (.use "[1]#[0]" functor)] ["[0]" set]]] [math ["[0]" random (.only Random) (.use "[1]#[0]" monad)] [number ["n" nat]]]]] [\\program ["[0]" /]]) (def .public random (Random /.Runtime) (all 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.alphabetic 5) runtime ..random] (`` (all _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (,, (with_template [] [(_.coverage [/.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 (the /.#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] )) (_.coverage [/.for] (let [runtime' (/.for runtime path)] (and (text#= (the /.#program runtime) (the /.#program runtime')) (|> runtime' (the /.#parameters) list.last (maybe#each (text#= path)) (maybe.else false))))) )))))