... This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. ... If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/. (.require [library [lux (.except) [abstract [monad (.only do)] ["[0]" equivalence ["[1]T" \\test]]] [control ["[0]" try (.use "[1]#[0]" functor)]] [data ["[0]" text (.use "[1]#[0]" equivalence) ["%" \\format (.only format)] ["<[1]>" \\parser]]] [math ["[0]" random (.only Random) (.use "[1]#[0]" monad)] [number ["n" nat] ["i" int]]] [world [time ["[0]" instant]]] [test ["_" property (.only Test)]]]] ["$[0]" /// ["[1][0]" stamp]] [\\program ["[0]" / (.only) ["//[1]" /// (.only) ["[1][0]" stamp] ["[1][0]" time]]]]) (def .public random (Random /.Value) (all random.and (random.alphabetic 5) (random.or (random#in []) $///stamp.random) )) (def .public test Test (<| (_.covering /._) (_.for [/.Value]) (all _.and (_.for [/.equivalence] (equivalenceT.spec /.equivalence ..random)) (do random.monad [sample random stamp $///stamp.random] (let [version (the /.#version sample) local! (text#= version (/.format (has /.#snapshot {///.#Local} sample))) remote_format (/.format [/.#version (format version /.snapshot) /.#snapshot {///.#Remote stamp}]) remote! (and (text.starts_with? (format version (///time.format (the ///stamp.#time stamp))) remote_format) (text.ends_with? (%.nat (the ///stamp.#build stamp)) remote_format))] (_.coverage [/.snapshot /.format] (and local! remote!)))) )))