diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/test/lux/abstract/equivalence.lux | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/stdlib/source/test/lux/abstract/equivalence.lux b/stdlib/source/test/lux/abstract/equivalence.lux index b7db2ee70..7cc5c95f9 100644 --- a/stdlib/source/test/lux/abstract/equivalence.lux +++ b/stdlib/source/test/lux/abstract/equivalence.lux @@ -18,7 +18,9 @@ [leftN random.nat rightN random.nat leftI random.int - rightI random.int] + rightI random.int + sample random.nat + different (|> random.nat (random.filter (|>> (n.= sample) not)))] (<| (_.covering /._) ($_ _.and (_.cover [/.sum] @@ -38,7 +40,26 @@ (:: equivalence = [leftN leftI] [leftN leftI])) (bit@= (and (:: n.equivalence = leftN rightN) (:: i.equivalence = leftI rightI)) - (:: equivalence = [leftN leftI] [rightN rightI]))))))))) + (:: equivalence = [leftN leftI] [rightN rightI]))))) + (_.cover [/.rec] + (let [equivalence (: (Equivalence (List Nat)) + (/.rec (function (_ equivalence) + (structure + (def: (= left right) + (case [left right] + [#.Nil #.Nil] + true + + [(#.Cons leftH lefT) (#.Cons rightH rightT)] + (and (n.= leftH rightH) + (:: equivalence = lefT rightT)) + + _ + false))))))] + (and (:: equivalence = (list sample sample) (list sample sample)) + (not (:: equivalence = (list sample sample) (list sample))) + (not (:: equivalence = (list sample sample) (list different different)))))) + )))) (def: #export (spec (^open "_@.") generator) (All [a] (-> (Equivalence a) (Random a) Test)) |