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