aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/lux/data/collection/sequence.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/test/lux/data/collection/sequence.lux170
1 files changed, 83 insertions, 87 deletions
diff --git a/stdlib/source/test/lux/data/collection/sequence.lux b/stdlib/source/test/lux/data/collection/sequence.lux
index 90971d2e9..edacef996 100644
--- a/stdlib/source/test/lux/data/collection/sequence.lux
+++ b/stdlib/source/test/lux/data/collection/sequence.lux
@@ -1,104 +1,100 @@
(.module:
[lux #*
+ data/text/format
+ ["_" test (#+ Test)]
[control
- [monad (#+ do Monad)]
- comonad]
+ comonad
+ [monad (#+ do Monad)]]
[data
["." maybe]
[number
- ["." nat ("#;." codec)]]
- ["." text ("#;." monoid)]
+ ["." nat ("#@." decimal)]]
+ ["." text ("#@." monoid)]
[collection
- ["." list]
- ["&" sequence]]]
+ ["." list]]]
[math
["r" random]]]
- lux/test)
+ {1
+ ["." /]})
-(context: "Sequences"
- (<| (times 100)
- (do @
+(def: #export test
+ Test
+ (<| (_.context (%name (name-of /.Sequence)))
+ (do r.monad
[size (|> r.nat (:: @ map (|>> (n/% 100) (n/max 2))))
offset (|> r.nat (:: @ map (n/% 100)))
factor (|> r.nat (:: @ map (|>> (n/% 100) (n/max 2))))
elem r.nat
cycle-seed (r.list size r.nat)
cycle-sample-idx (|> r.nat (:: @ map (n/% 1000)))
- #let [(^open "List;.") (list.equivalence number.equivalence)
- sample0 (&.iterate inc 0)
- sample1 (&.iterate inc offset)]]
- ($_ seq
- (test "Can move along a sequence and take slices off it."
- (and (and (List;= (list.n/range 0 (dec size))
- (&.take size sample0))
- (List;= (list.n/range offset (dec (n/+ offset size)))
- (&.take size (&.drop offset sample0)))
- (let [[drops takes] (&.split size sample0)]
- (and (List;= (list.n/range 0 (dec size))
- drops)
- (List;= (list.n/range size (dec (n/* 2 size)))
- (&.take size takes)))))
- (and (List;= (list.n/range 0 (dec size))
- (&.take-while (n/< size) sample0))
- (List;= (list.n/range offset (dec (n/+ offset size)))
- (&.take-while (n/< (n/+ offset size))
- (&.drop-while (n/< offset) sample0)))
- (let [[drops takes] (&.split-while (n/< size) sample0)]
- (and (List;= (list.n/range 0 (dec size))
- drops)
- (List;= (list.n/range size (dec (n/* 2 size)))
- (&.take-while (n/< (n/* 2 size)) takes)))))
- ))
-
- (test "Can repeat any element and infinite number of times."
- (n/= elem (&.nth offset (&.repeat elem))))
-
- (test "Can obtain the head & tail of a sequence."
- (and (n/= offset (&.head sample1))
- (List;= (list.n/range (inc offset) (n/+ offset size))
- (&.take size (&.tail sample1)))))
-
- (test "Can filter sequences."
- (and (n/= (n/* 2 offset)
- (&.nth offset
- (&.filter n/even? sample0)))
- (let [[evens odds] (&.partition n/even? (&.iterate inc 0))]
- (and (n/= (n/* 2 offset)
- (&.nth offset evens))
- (n/= (inc (n/* 2 offset))
- (&.nth offset odds))))))
-
- (test "Functor goes over 'all' elements in a sequence."
- (let [(^open "&;.") &.functor
- there (&;map (n/* factor) sample0)
- back-again (&;map (n// factor) there)]
- (and (not (List;= (&.take size sample0)
- (&.take size there)))
- (List;= (&.take size sample0)
- (&.take size back-again)))))
-
- (test "CoMonad produces a value for every element in a sequence."
- (let [(^open "&;.") &.functor]
- (List;= (&.take size (&;map (n/* factor) sample1))
- (&.take size
- (be &.comonad
- [inputs sample1]
- (n/* factor (&.head inputs)))))))
-
- (test "'unfold' generalizes 'iterate'."
- (let [(^open "&;.") &.functor
- (^open "List;.") (list.equivalence text.equivalence)]
- (List;= (&.take size
- (&;map nat;encode (&.iterate inc offset)))
- (&.take size
- (&.unfold (function (_ n) [(inc n) (nat;encode n)])
- offset)))))
-
- (test "Can cycle over the same elements as an infinite sequence."
- (|> (&.cycle cycle-seed)
- maybe.assume
- (&.nth cycle-sample-idx)
- (n/= (|> cycle-seed
- (list.nth (n/% size cycle-sample-idx))
- maybe.assume))))
+ #let [(^open "list@.") (list.equivalence nat.equivalence)
+ sample0 (/.iterate inc 0)
+ sample1 (/.iterate inc offset)]]
+ ($_ _.and
+ (_.test "Can move along a sequence and take slices off it."
+ (and (and (list@= (list.n/range 0 (dec size))
+ (/.take size sample0))
+ (list@= (list.n/range offset (dec (n/+ offset size)))
+ (/.take size (/.drop offset sample0)))
+ (let [[drops takes] (/.split size sample0)]
+ (and (list@= (list.n/range 0 (dec size))
+ drops)
+ (list@= (list.n/range size (dec (n/* 2 size)))
+ (/.take size takes)))))
+ (and (list@= (list.n/range 0 (dec size))
+ (/.take-while (n/< size) sample0))
+ (list@= (list.n/range offset (dec (n/+ offset size)))
+ (/.take-while (n/< (n/+ offset size))
+ (/.drop-while (n/< offset) sample0)))
+ (let [[drops takes] (/.split-while (n/< size) sample0)]
+ (and (list@= (list.n/range 0 (dec size))
+ drops)
+ (list@= (list.n/range size (dec (n/* 2 size)))
+ (/.take-while (n/< (n/* 2 size)) takes)))))
+ ))
+ (_.test "Can repeat any element and infinite number of times."
+ (n/= elem (/.nth offset (/.repeat elem))))
+ (_.test "Can obtain the head & tail of a sequence."
+ (and (n/= offset (/.head sample1))
+ (list@= (list.n/range (inc offset) (n/+ offset size))
+ (/.take size (/.tail sample1)))))
+ (_.test "Can filter sequences."
+ (and (n/= (n/* 2 offset)
+ (/.nth offset
+ (/.filter n/even? sample0)))
+ (let [[evens odds] (/.partition n/even? (/.iterate inc 0))]
+ (and (n/= (n/* 2 offset)
+ (/.nth offset evens))
+ (n/= (inc (n/* 2 offset))
+ (/.nth offset odds))))))
+ (_.test "Functor goes over 'all' elements in a sequence."
+ (let [(^open "/@.") /.functor
+ there (/@map (n/* factor) sample0)
+ back-again (/@map (n// factor) there)]
+ (and (not (list@= (/.take size sample0)
+ (/.take size there)))
+ (list@= (/.take size sample0)
+ (/.take size back-again)))))
+ (_.test "CoMonad produces a value for every element in a sequence."
+ (let [(^open "/@.") /.functor]
+ (list@= (/.take size (/@map (n/* factor) sample1))
+ (/.take size
+ (be /.comonad
+ [inputs sample1]
+ (n/* factor (/.head inputs)))))))
+ (_.test "'unfold' generalizes 'iterate'."
+ (let [(^open "/@.") /.functor
+ (^open "list@.") (list.equivalence text.equivalence)]
+ (list@= (/.take size
+ (/@map nat@encode (/.iterate inc offset)))
+ (/.take size
+ (/.unfold (function (_ n) [(inc n) (nat@encode n)])
+ offset)))))
+ (_.test "Can cycle over the same elements as an infinite sequence."
+ (|> (/.cycle cycle-seed)
+ maybe.assume
+ (/.nth cycle-sample-idx)
+ (n/= (|> cycle-seed
+ (list.nth (n/% size cycle-sample-idx))
+ maybe.assume))))
))))