(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)] ["." predicate]] [control ["." try] [concurrency ["." promise]]] [data [text ["%" format (#+ format)]] [collection ["." dictionary] ["." set]]] [math ["." random (#+ Random)]] [world ["." file]]] ["$." /// #_ ["#." package] ["#." artifact] ["#." dependency #_ ["#/." resolution]]] {#program ["." / ["//#" /// #_ ["#" profile] ["#." action] ["#." pom] ["#." package] ["#." cache] ["#." repository] ["#." artifact ["#/." type]] ["#." dependency ["#/." resolution]]]]}) (def: #export test Test (<| (_.covering /._) (do random.monad [dependee-artifact $///artifact.random depender-artifact (random.filter (predicate.complement (:: ///artifact.equivalence = dependee-artifact)) $///artifact.random) [_ dependee-package] $///package.random [_ depender-package] $///package.random #let [dependee {#///dependency.artifact dependee-artifact #///dependency.type ///artifact/type.lux-library} depender {#///dependency.artifact depender-artifact #///dependency.type ///artifact/type.lux-library} dependee-pom (|> (:: ///.monoid identity) (set@ #///.identity (#.Some dependee-artifact)) ///pom.write try.assume) depender-pom (|> (:: ///.monoid identity) (set@ #///.identity (#.Some depender-artifact)) (set@ #///.dependencies (set.from-list ///dependency.hash (list dependee))) ///pom.write try.assume) dependee-package (|> dependee-package (set@ #///package.origin #///package.Remote) (set@ #///package.pom dependee-pom)) depender-package (|> depender-package (set@ #///package.origin #///package.Remote) (set@ #///package.pom depender-pom)) fs (file.mock (:: file.default separator))]] (wrap (do promise.monad [verdict (do ///action.monad [pre (|> ///dependency/resolution.empty (dictionary.put dependee dependee-package) (///cache.write-all fs)) post (|> (:: ///.monoid identity) (set@ #///.dependencies (set.from-list ///dependency.hash (list dependee depender))) (/.do! fs (list (///repository.mock ($///dependency/resolution.single depender-artifact depender-package) []))))] (wrap (and (and (set.member? pre dependee-artifact) (not (set.member? pre depender-artifact))) (and (dictionary.contains? dependee post) (dictionary.contains? depender post)))))] (_.cover' [/.do!] (try.default false verdict)))))))