aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/abstract/equivalence.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/test/lux/abstract/equivalence.lux25
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))