diff options
author | Louis Pilfold <louis@lpil.uk> | 2019-12-12 12:40:56 +0000 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2020-05-26 19:19:29 +0100 |
commit | 649c7f2fc4e71f4516bb7f5f6520d1961fb95cad (patch) | |
tree | f887bb3913640165087553a3af5a315229ba1f2a | |
parent | 6f119464b4cfd09a3555120e3f9370d504fb7ea0 (diff) | |
download | gleam_stdlib-649c7f2fc4e71f4516bb7f5f6520d1961fb95cad.tar.gz gleam_stdlib-649c7f2fc4e71f4516bb7f5f6520d1961fb95cad.zip |
drop
-rw-r--r-- | src/gleam/iterator.gleam | 18 | ||||
-rw-r--r-- | test/gleam/iterator_test.gleam | 36 |
2 files changed, 34 insertions, 20 deletions
diff --git a/src/gleam/iterator.gleam b/src/gleam/iterator.gleam index 690d66e..6f42f9c 100644 --- a/src/gleam/iterator.gleam +++ b/src/gleam/iterator.gleam @@ -121,6 +121,24 @@ pub fn take(from iterator: Iterator(e), up_to desired: Int) -> List(e) { |> list.reverse } +fn do_drop(iterator, desired) { + case desired > 0 { + True -> case iterator() { + Continue(_, iterator) -> do_drop(iterator, desired - 1) + Stop -> fn() { Stop } + } + False -> iterator + } +} + +// TODO: document +pub fn drop(from iterator: Iterator(e), up_to desired: Int) -> Iterator(e) { + iterator + |> unopaque + |> do_drop(_, desired) + |> opaque +} + // Transforming Iterators fn do_map(iterator, f) { diff --git a/test/gleam/iterator_test.gleam b/test/gleam/iterator_test.gleam index 079d57d..936621e 100644 --- a/test/gleam/iterator_test.gleam +++ b/test/gleam/iterator_test.gleam @@ -119,27 +119,23 @@ pub fn unfold_test() { } pub fn range_test() { - iterator.range(0, 0) - |> iterator.to_list - |> expect.equal(_, []) - - iterator.range(1, 1) - |> iterator.to_list - |> expect.equal(_, []) - - iterator.range(-1, -1) - |> iterator.to_list - |> expect.equal(_, []) - - iterator.range(0, 1) - |> iterator.to_list - |> expect.equal(_, [0]) + let test = fn(a, b, expected) { + iterator.range(a, b) + |> iterator.to_list + |> expect.equal(_, expected) + } - iterator.range(0, 5) - |> iterator.to_list - |> expect.equal(_, [0, 1, 2, 3, 4]) + test(0, 0, []) + test(1, 1, []) + test(-1, -1, []) + test(0, 1, [0]) + test(0, 5, [0, 1, 2, 3, 4]) + test(1, -5, [1, 0, -1, -2, -3, -4]) +} - iterator.range(1, -5) +pub fn drop_test() { + iterator.range(0, 10) + |> iterator.drop(_, 5) |> iterator.to_list - |> expect.equal(_, [1, 0, -1, -2, -3, -4]) + |> expect.equal(_, [5, 6, 7, 8, 9]) } |