diff --git a/core/src/main/scala/cats/data/NonEmptyVector.scala b/core/src/main/scala/cats/data/NonEmptyVector.scala index 52d9c8bc8a..c5252c6157 100644 --- a/core/src/main/scala/cats/data/NonEmptyVector.scala +++ b/core/src/main/scala/cats/data/NonEmptyVector.scala @@ -115,6 +115,12 @@ final class NonEmptyVector[+A] private (val toVector: Vector[A]) */ def prepend[AA >: A](a: AA): NonEmptyVector[AA] = new NonEmptyVector(a +: toVector) + /** + * Prepend a `Vector` to this, producing a new `NonEmptyVector`. + */ + def prependVector[AA >: A](vector: Vector[AA]): NonEmptyVector[AA] = + new NonEmptyVector(vector ++ this.toVector) + /** * Alias for [[prepend]] */ diff --git a/tests/src/test/scala/cats/tests/NonEmptyVectorSuite.scala b/tests/src/test/scala/cats/tests/NonEmptyVectorSuite.scala index ad02ac35e0..8a099939ef 100644 --- a/tests/src/test/scala/cats/tests/NonEmptyVectorSuite.scala +++ b/tests/src/test/scala/cats/tests/NonEmptyVectorSuite.scala @@ -247,6 +247,18 @@ class NonEmptyVectorSuite extends NonEmptyCollectionSuite[Vector, NonEmptyVector } } + test("prependVector with a NonEmptyVector is the same as concatNec") { + forAll { (nonEmptyVector1: NonEmptyVector[Int], nonEmptyVector2: NonEmptyVector[Int]) => + nonEmptyVector2.prependVector(nonEmptyVector1.toVector) should ===(nonEmptyVector1.concatNev(nonEmptyVector2)) + } + } + + test("prependVector with an empty Vector is the same as the original NonEmptyVector") { + forAll { (nonEmptyVector: NonEmptyVector[Int]) => + nonEmptyVector.prependVector(Vector.empty) should ===(nonEmptyVector) + } + } + test("NonEmptyVector#of on varargs is consistent with NonEmptyVector#apply on Vector") { forAll { (head: Int, tail: Vector[Int]) => NonEmptyVector.of(head, tail: _*) should ===(NonEmptyVector(head, tail))