diff options
-rw-r--r-- | src/gleam/iterator.gleam | 19 | ||||
-rw-r--r-- | test/gleam/iterator_test.gleam | 16 |
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) +} |