diff --git a/itlib/each.go b/itlib/each.go index a344d6e..cbeaf50 100644 --- a/itlib/each.go +++ b/itlib/each.go @@ -112,3 +112,13 @@ func Sum[T constraints.Ordered](it itkit.Iterator[T]) T { var zero T return SumWithInitial(zero, it) } + +// Drop drops n items from the iterator. +func Drop[T any](n uint, it itkit.Iterator[T]) itkit.Iterator[T] { + for i := uint(0); i < n; i++ { + if !it.Next() { + break + } + } + return it +} diff --git a/itlib/each_test.go b/itlib/each_test.go index e43c823..cb5d7e8 100644 --- a/itlib/each_test.go +++ b/itlib/each_test.go @@ -172,3 +172,35 @@ func TestSum(t *testing.T) { assertpkg.Equal(t, "abc", n) }) } + +func TestDrop(t *testing.T) { + t.Run("empty", func(t *testing.T) { + it := itlib.Empty[any]() + + it2 := itlib.Drop(4, it) + assertpkg.Same(t, it, it2) + }) + + t.Run("exactly", func(t *testing.T) { + assert := assertpkg.New(t) + + it := rangeit.Range(5) + + it2 := itlib.Drop(5, it) + assert.Same(it, it2) + + assert.False(it.Next()) + }) + + t.Run("less", func(t *testing.T) { + assert := assertpkg.New(t) + + it := rangeit.Range(5) + + it2 := itlib.Drop(4, it) + assert.Same(it, it2) + + assert.True(it.Next()) + assert.Equal(it.Value(), 4) + }) +}