(.module: [library [lux "*" ["_" test {"+" [Test]}] [abstract [monad {"+" [do]}] [\\specification ["$[0]" equivalence]]] [control ["[0]" try ("[1]\[0]" functor)] [parser ["<[0]>" text]]] [data ["[0]" text ("[1]\[0]" equivalence) ["%" format {"+" [format]}]]] [math ["[0]" random {"+" [Random]} ("[1]\[0]" monad)] [number ["n" nat] ["i" int]]] [time ["[0]" instant]]]] ["$[0]" /// "_" ["[1][0]" stamp]] [\\program ["[0]" / ["//[1]" /// ["[1][0]" stamp] ["[1][0]" time]]]]) (def: .public random (Random /.Value) ($_ random.and (random.ascii/alpha 5) (random.or (random\in []) $///stamp.random) )) (def: .public test Test (<| (_.covering /._) (_.for [/.Value]) ($_ _.and (_.for [/.equivalence] ($equivalence.spec /.equivalence ..random)) (do random.monad [sample random stamp $///stamp.random] (let [version (value@ #/.version sample) local! (text\= version (/.format (with@ #/.snapshot #///.Local sample))) remote_format (/.format [#/.version (format version /.snapshot) #/.snapshot (#///.Remote stamp)]) remote! (and (text.starts_with? (format version (///time.format (value@ #///stamp.time stamp))) remote_format) (text.ends_with? (%.nat (value@ #///stamp.build stamp)) remote_format))] (_.cover [/.snapshot /.format] (and local! remote!)))) )))