diff --git a/core/src/main/scala/scala/collection/parallel/ParIterableLike.scala b/core/src/main/scala/scala/collection/parallel/ParIterableLike.scala index 4ab1c0f5..4190e6e9 100644 --- a/core/src/main/scala/scala/collection/parallel/ParIterableLike.scala +++ b/core/src/main/scala/scala/collection/parallel/ParIterableLike.scala @@ -358,6 +358,8 @@ extends IterableOnce[T @uncheckedVariance] * if this $coll is empty. */ def reduce[U >: T](op: (U, U) => U): U = { + if (isEmpty) throw new UnsupportedOperationException("empty.reduce") + tasksupport.executeAndWaitResult(new Reduce(op, splitter)).get } @@ -463,10 +465,14 @@ extends IterableOnce[T @uncheckedVariance] } def min[U >: T](implicit ord: Ordering[U]): T = { + if (isEmpty) throw new UnsupportedOperationException("empty.min") + tasksupport.executeAndWaitResult(new Min(ord, splitter)).get.asInstanceOf[T] } def max[U >: T](implicit ord: Ordering[U]): T = { + if (isEmpty) throw new UnsupportedOperationException("empty.max") + tasksupport.executeAndWaitResult(new Max(ord, splitter)).get.asInstanceOf[T] } diff --git a/junit/src/test/scala/scala/collection/parallel/mutable/ParArrayTest.scala b/junit/src/test/scala/scala/collection/parallel/mutable/ParArrayTest.scala index 458951ae..12eb8680 100644 --- a/junit/src/test/scala/scala/collection/parallel/mutable/ParArrayTest.scala +++ b/junit/src/test/scala/scala/collection/parallel/mutable/ParArrayTest.scala @@ -85,6 +85,11 @@ class ParArrayTest extends scala.collection.concurrent.ctries_old.Spec { assert( ParArray(1,2,3,4,5).reduce(_+_) == 15 ) } + @Test + def `empty reduce`: Unit = { + evaluating { ParArray.empty[Int].reduce(_+_) }.shouldProduce[UnsupportedOperationException]() + } + @Test def `simple count`: Unit = { assert( ParArray[Int]().count(_ > 7) == 0 ) @@ -127,4 +132,25 @@ class ParArrayTest extends scala.collection.concurrent.ctries_old.Spec { def `simple map test`: Unit = { assert(ParArray(1,2,3,4,5).map( (_:Int) * 10 ) == ParArray(10,20,30,40,50)) } + + @Test + def `empty min`: Unit = { + evaluating { ParArray.empty[Int].min }.shouldProduce[UnsupportedOperationException]() + } + + @Test + def `empty max`: Unit = { + evaluating { ParArray.empty[Int].max }.shouldProduce[UnsupportedOperationException]() + } + + @Test + def `empty minBy`: Unit = { + evaluating { ParArray.empty[String].minBy(_.length) }.shouldProduce[UnsupportedOperationException]() + } + + @Test + def `emtpy maxBy`: Unit = { + evaluating { ParArray.empty[String].maxBy(_.length) }.shouldProduce[UnsupportedOperationException]() + } + }