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