aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/data
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/test/lux/data.lux26
-rw-r--r--stdlib/source/test/lux/data/collection/list.lux3
-rw-r--r--stdlib/source/test/lux/data/collection/tree.lux112
-rw-r--r--stdlib/source/test/lux/data/collection/tree/zipper.lux3
4 files changed, 75 insertions, 69 deletions
diff --git a/stdlib/source/test/lux/data.lux b/stdlib/source/test/lux/data.lux
index 287a93526..6ae68a061 100644
--- a/stdlib/source/test/lux/data.lux
+++ b/stdlib/source/test/lux/data.lux
@@ -42,28 +42,6 @@
[_ (wrap [])]
body)))
-(def: number
- Test
- ## TODO: Inline ASAP
- (let [part0 ($_ _.and
- /i8.test
- /i16.test
- /i32.test
- /i64.test)
- part1 ($_ _.and
- /nat.test
- /int.test
- /rev.test)
- part2 ($_ _.and
- /frac.test
- /ratio.test
- /complex.test)]
- ($_ _.and
- (!bundle part0)
- (!bundle part1)
- (!bundle part2)
- )))
-
(def: text
($_ _.and
/text.test
@@ -93,10 +71,10 @@
/product.test)
test2 ($_ _.and
/sum.test
- ..number
..text
..format
- /collection.test)]
+ /collection.test
+ )]
($_ _.and
(!bundle test0)
(!bundle test1)
diff --git a/stdlib/source/test/lux/data/collection/list.lux b/stdlib/source/test/lux/data/collection/list.lux
index a81de6c24..2190c2fe2 100644
--- a/stdlib/source/test/lux/data/collection/list.lux
+++ b/stdlib/source/test/lux/data/collection/list.lux
@@ -177,7 +177,8 @@
(let [(^open "/@.") (/.equivalence n.equivalence)
(^open "/@.") /.monoid]
(do {! random.monad}
- [sample ..random
+ [sample (random.filter (|>> /.size (n.> 0))
+ ..random)
#let [size (/.size sample)]
idx (:: ! map (n.% size) random.nat)
chunk-size (:: ! map (|>> (n.% size) inc) random.nat)]
diff --git a/stdlib/source/test/lux/data/collection/tree.lux b/stdlib/source/test/lux/data/collection/tree.lux
index 8ba66ef02..ccd4a1d70 100644
--- a/stdlib/source/test/lux/data/collection/tree.lux
+++ b/stdlib/source/test/lux/data/collection/tree.lux
@@ -1,63 +1,91 @@
(.module:
[lux #*
- ["%" data/text/format (#+ format)]
["_" test (#+ Test)]
[abstract
- [monad (#+ do)]
+ ["." monad (#+ do)]
{[0 #spec]
[/
["$." equivalence]
["$." fold]
["$." functor]]}]
[data
+ ["." product]
[number
["n" nat]]
[collection
["." list ("#@." functor fold)]]]
[math
- ["r" random (#+ Random)]]]
+ ["." random (#+ Random)]]]
{1
["." / (#+ Tree)]})
-(def: #export (tree size gen-value)
- (All [a] (-> Nat (Random a) (Random (Tree a))))
- (let [singleton (:: r.monad map /.leaf gen-value)]
- (case size
- 0
- singleton
-
- 1
- singleton
-
- 2
- (do r.monad
- [value gen-value
- single (tree 1 gen-value)]
- (wrap (/.branch value (list single))))
-
- _
- (do r.monad
- [value gen-value
- #let [size (dec size)]
- left (tree (n./ 2 size) gen-value)
- right (tree (n.+ (n.% 2 size) (n./ 2 size))
- gen-value)]
- (wrap (/.branch value (list left right))))
- )))
+(def: #export (tree gen-value)
+ (All [a] (-> (Random a) (Random [Nat (Tree a)])))
+ (do {! random.monad}
+ [value gen-value
+ num-children (:: ! map (n.% 2) random.nat)
+ children (random.list num-children (tree gen-value))]
+ (wrap [(|> children
+ (list@map product.left)
+ (list@fold n.+ 1))
+ {#/.value value
+ #/.children (list@map product.right children)}])))
(def: #export test
Test
- (<| (_.context (%.name (name-of /.Tree)))
- (do {! r.monad}
- [size (:: ! map (|>> (n.% 100) (n.+ 1)) r.nat)]
- ($_ _.and
- ($equivalence.spec (/.equivalence n.equivalence) (..tree size r.nat))
- ($fold.spec /.leaf /.equivalence /.fold)
- ($functor.spec /.leaf /.equivalence /.functor)
-
- (do !
- [sample (..tree size r.nat)]
- (_.test "Can flatten a tree to get all the nodes as a flat tree."
- (n.= size
- (list.size (/.flatten sample)))))
- ))))
+ (<| (_.covering /._)
+ (_.with-cover [/.Tree])
+ ($_ _.and
+ (_.with-cover [/.equivalence]
+ (|> (..tree random.nat)
+ (:: random.monad map product.right)
+ ($equivalence.spec (/.equivalence n.equivalence))))
+ (_.with-cover [/.fold]
+ ($fold.spec /.leaf /.equivalence /.fold))
+ (_.with-cover [/.functor]
+ ($functor.spec /.leaf /.equivalence /.functor))
+
+ (do random.monad
+ [[size sample] (..tree random.nat)]
+ (_.cover [/.flatten]
+ (n.= size
+ (list.size (/.flatten sample)))))
+ (do random.monad
+ [expected random.nat]
+ (_.cover [/.leaf]
+ (:: (list.equivalence n.equivalence) =
+ (list expected)
+ (/.flatten (/.leaf expected)))))
+ (do {! random.monad}
+ [value random.nat
+ num-children (:: ! map (n.% 3) random.nat)
+ children (random.list num-children random.nat)]
+ (_.cover [/.branch]
+ (:: (list.equivalence n.equivalence) =
+ (list& value children)
+ (/.flatten (/.branch value (list@map /.leaf children))))))
+ (do random.monad
+ [expected/0 random.nat
+ expected/1 random.nat
+ expected/2 random.nat
+ expected/3 random.nat
+ expected/4 random.nat
+ expected/5 random.nat]
+ (_.cover [/.tree]
+ (and (:: (list.equivalence n.equivalence) =
+ (list expected/0)
+ (/.flatten (/.tree expected/0)))
+ (:: (list.equivalence n.equivalence) =
+ (list expected/0 expected/1 expected/2)
+ (/.flatten (/.tree expected/0
+ {expected/1 {}
+ expected/2 {}})))
+ (:: (list.equivalence n.equivalence) =
+ (list expected/0 expected/1 expected/2
+ expected/3 expected/4 expected/5)
+ (/.flatten (/.tree expected/0
+ {expected/1 {}
+ expected/2 {expected/3 {}
+ expected/4 {expected/5 {}}}})))
+ )))
+ )))
diff --git a/stdlib/source/test/lux/data/collection/tree/zipper.lux b/stdlib/source/test/lux/data/collection/tree/zipper.lux
index 7354eafed..6d0ab8a6c 100644
--- a/stdlib/source/test/lux/data/collection/tree/zipper.lux
+++ b/stdlib/source/test/lux/data/collection/tree/zipper.lux
@@ -24,8 +24,7 @@
Test
(<| (_.context (%.name (name-of /.Zipper)))
(do {! r.monad}
- [size (:: ! map (|>> (n.% 90) (n.+ 10)) r.nat)
- sample (//.tree size r.nat)
+ [[size sample] (//.tree r.nat)
mid-val r.nat
new-val r.nat
pre-val r.nat