(.using [library [lux (.full) ["_" test (.only Test)] [abstract [monad (.only do)]] [control ["[0]" try] [concurrency ["[0]" async (.only Async)]]] [data ["[0]" text] [collection ["[0]" dictionary] ["[0]" list]]] [math ["[0]" random]]]] [\\library ["[0]" /]]) (def: .public (spec subject) (-> (/.Program Async) Test) (do random.monad [exit random.int] (in (do [! async.monad] [environment (/.environment ! subject)] (_.coverage' [/.Program] (and (not (dictionary.empty? environment)) (list.every? (|>> text.empty? not) (dictionary.keys environment)) (not (text.empty? (# subject home))) (not (text.empty? (# subject directory)))))))))