diff --git a/core/shared/src/main/scala/fs2/Stream.scala b/core/shared/src/main/scala/fs2/Stream.scala index 108a712941..02a77e0fd2 100644 --- a/core/shared/src/main/scala/fs2/Stream.scala +++ b/core/shared/src/main/scala/fs2/Stream.scala @@ -2574,9 +2574,9 @@ final class Stream[+F[_], +O] private[fs2] (private[fs2] val underlying: Pull[F, * }}} */ def repeatN(n: Long): Stream[F, O] = { - require(n > 0, "n must be > 0") // same behaviour as sliding - if (n > 1) this ++ repeatN(n - 1) - else this + require(n >= 0, "n must be >= 0") + if (n > 0) this ++ repeatN(n - 1) + else Stream.empty } /** Converts a `Stream[F,Either[Throwable,O]]` to a `Stream[F,O]`, which emits right values and fails upon the first `Left(t)`. diff --git a/core/shared/src/test/scala/fs2/StreamSuite.scala b/core/shared/src/test/scala/fs2/StreamSuite.scala index 740aca08cf..a812b57a0d 100644 --- a/core/shared/src/test/scala/fs2/StreamSuite.scala +++ b/core/shared/src/test/scala/fs2/StreamSuite.scala @@ -590,7 +590,7 @@ class StreamSuite extends Fs2Suite { property("repeatN") { forAll( - Gen.chooseNum(1, 200), + Gen.chooseNum(0, 200), Gen.chooseNum(1, 200).flatMap(i => Gen.listOfN(i, arbitrary[Int])) ) { (n: Int, testValues: List[Int]) => assertEquals(