aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2019-12-11 08:10:40 +0000
committerLouis Pilfold <louis@lpil.uk>2020-05-26 19:19:29 +0100
commit85fdfb298d7c9328c41a90e0da02a211785c0aa6 (patch)
tree90f041d863c545d55cf510c784173249232ebc49
parent21e774dea2d678b90d5eb872eb9f0d9924c818ab (diff)
downloadgleam_stdlib-85fdfb298d7c9328c41a90e0da02a211785c0aa6.tar.gz
gleam_stdlib-85fdfb298d7c9328c41a90e0da02a211785c0aa6.zip
fold test
-rw-r--r--src/gleam/iterator.gleam19
-rw-r--r--test/gleam/iterator_test.gleam16
2 files changed, 30 insertions, 5 deletions
diff --git a/src/gleam/iterator.gleam b/src/gleam/iterator.gleam
index 6634f23..b51987d 100644
--- a/src/gleam/iterator.gleam
+++ b/src/gleam/iterator.gleam
@@ -48,7 +48,9 @@ fn do_unfold(initial, f) {
// TODO: test
// TODO: document
pub fn unfold(from initial: acc, with f: fn(acc) -> Step(element, acc)) -> Iterator(element) {
- opaque(do_unfold(initial, f))
+ initial
+ |> do_unfold(_, f)
+ |> opaque
}
// TODO: test
@@ -82,10 +84,11 @@ fn do_fold(iterator, initial, f) {
}
}
-// TODO: test
// TODO: document
pub fn fold(over iterator: Iterator(e), from initial: acc, with f: fn(e, acc) -> acc) -> acc {
- do_fold(unopaque(iterator), initial, f)
+ iterator
+ |> unopaque
+ |> do_fold(_, initial, f)
}
// TODO: test
@@ -134,7 +137,10 @@ fn do_map(iterator, f) {
// TODO: test
// TODO: document
pub fn map(over iterator: Iterator(a), with f: fn(a) -> b) -> Iterator(b) {
- opaque(do_map(unopaque(iterator), f))
+ iterator
+ |> unopaque
+ |> do_map(_, f)
+ |> opaque
}
fn do_filter(iterator, predicate) {
@@ -152,5 +158,8 @@ fn do_filter(iterator, predicate) {
// TODO: test
// TODO: document
pub fn filter(iterator: Iterator(a), for predicate: fn(a) -> Bool) -> Iterator(a) {
- opaque(do_filter(unopaque(iterator), predicate))
+ iterator
+ |> unopaque
+ |> do_filter(_, predicate)
+ |> opaque
}
diff --git a/test/gleam/iterator_test.gleam b/test/gleam/iterator_test.gleam
index 2d9ee3f..46ac65a 100644
--- a/test/gleam/iterator_test.gleam
+++ b/test/gleam/iterator_test.gleam
@@ -39,3 +39,19 @@ pub fn take_test() {
test(2, [0, 1, 2, 3, 4])
test(22, [0, 1, 2, 3, 4])
}
+
+// a |> from_list |> fold(_, a, f) == a |> list.fold(_, a, f)
+pub fn fold_test() {
+ let test = fn(subject, acc, f) {
+ subject
+ |> iterator.from_list
+ |> iterator.fold(_, acc, f)
+ |> expect.equal(_, list.fold(subject, acc, f))
+ }
+
+ let f = fn(e, acc) { [e | acc] }
+ test([], [], f)
+ test([1], [], f)
+ test([1, 2, 3], [], f)
+ test([1, 2, 3, 4, 5, 6, 7, 8], [], f)
+}