aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)
+}