aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2019-12-11 23:13:56 +0000
committerLouis Pilfold <louis@lpil.uk>2020-05-26 19:19:29 +0100
commit8505fbdd21c5cb27679e4812f2fdcd4779ecc97b (patch)
treeb33329131a3b45d0fbe3c14b0fe0eac1150aaba3
parent59b0492625fa19e7feaa408efa63844765ec56c9 (diff)
downloadgleam_stdlib-8505fbdd21c5cb27679e4812f2fdcd4779ecc97b.tar.gz
gleam_stdlib-8505fbdd21c5cb27679e4812f2fdcd4779ecc97b.zip
filter test
-rw-r--r--src/gleam/iterator.gleam3
-rw-r--r--test/gleam/iterator_test.gleam20
2 files changed, 21 insertions, 2 deletions
diff --git a/src/gleam/iterator.gleam b/src/gleam/iterator.gleam
index b51987d..32bed9c 100644
--- a/src/gleam/iterator.gleam
+++ b/src/gleam/iterator.gleam
@@ -134,7 +134,6 @@ fn do_map(iterator, f) {
}
}
-// TODO: test
// TODO: document
pub fn map(over iterator: Iterator(a), with f: fn(a) -> b) -> Iterator(b) {
iterator
@@ -147,7 +146,7 @@ fn do_filter(iterator, predicate) {
fn() {
case iterator() {
Continue(e, iterator) -> case predicate(e) {
- True -> Continue(e, iterator)
+ True -> Continue(e, do_filter(iterator, predicate))
False -> do_filter(iterator, predicate)()
}
Stop -> Stop
diff --git a/test/gleam/iterator_test.gleam b/test/gleam/iterator_test.gleam
index 4d43053..f072889 100644
--- a/test/gleam/iterator_test.gleam
+++ b/test/gleam/iterator_test.gleam
@@ -72,3 +72,23 @@ pub fn map_test() {
test([1, 2, 3], f)
test([1, 2, 3, 4, 5, 6, 7, 8], f)
}
+
+// a |> from_list |> filter(_, f) |> to_list == a |> list.filter(_, f)
+pub fn filter_test() {
+ let test = fn(subject, f) {
+ subject
+ |> iterator.from_list
+ |> iterator.filter(_, f)
+ |> iterator.to_list
+ |> expect.equal(_, list.filter(subject, f))
+ }
+
+ let even = fn(x) { x % 2 == 0 }
+ test([], even)
+ test([1], even)
+ test([1, 2], even)
+ test([1, 2, 3], even)
+ test([1, 2, 3, 4], even)
+ test([1, 2, 3, 4, 5], even)
+ test([1, 2, 3, 4, 5, 6], even)
+}