diff options
Diffstat (limited to 'stdlib/source/test/aedifex/artifact/snapshot')
-rw-r--r-- | stdlib/source/test/aedifex/artifact/snapshot/version/value.lux | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/stdlib/source/test/aedifex/artifact/snapshot/version/value.lux b/stdlib/source/test/aedifex/artifact/snapshot/version/value.lux new file mode 100644 index 000000000..dc3f754a2 --- /dev/null +++ b/stdlib/source/test/aedifex/artifact/snapshot/version/value.lux @@ -0,0 +1,66 @@ +(.module: + [lux #* + ["_" test (#+ Test)] + [abstract + [monad (#+ do)] + {[0 #spec] + [/ + ["$." equivalence]]}] + [control + ["." try ("#\." functor)] + [parser + ["<.>" text]]] + [data + ["." text ("#\." equivalence) + ["%" format (#+ format)]]] + [math + ["." random (#+ Random) ("#\." monad)] + [number + ["n" nat] + ["i" int]]] + [time + ["." instant]]] + ["$." /// #_ + ["#." stamp]] + {#program + ["." / + ["//#" /// + ["#." stamp] + ["#." time]]]}) + +(def: #export random + (Random /.Value) + ($_ random.and + (random.ascii/alpha 5) + (random.or (random\wrap []) + $///stamp.random) + )) + +(def: #export test + Test + (<| (_.covering /._) + (_.for [/.Value]) + ($_ _.and + (_.for [/.equivalence] + ($equivalence.spec /.equivalence ..random)) + + (do random.monad + [sample random + stamp $///stamp.random] + (let [version (get@ #/.version sample) + + local! + (text\= version + (/.format (set@ #/.snapshot #///.Local sample))) + + remote_format (/.format {#/.version (format version /.snapshot) + #/.snapshot (#///.Remote stamp)}) + remote! + (and (text.starts_with? (format version (///time.format (get@ #///stamp.time stamp))) + remote_format) + (text.ends_with? (%.nat (get@ #///stamp.build stamp)) + remote_format))] + (_.cover [/.snapshot /.format] + (and local! + remote!)))) + ))) |