diff options
Diffstat (limited to 'test')
9 files changed, 118 insertions, 41 deletions
diff --git a/test/benchmarks/source.list b/test/benchmarks/source.list index dffd5ef4ea..9382e996dc 100644 --- a/test/benchmarks/source.list +++ b/test/benchmarks/source.list @@ -35,6 +35,7 @@ src/scala/collection/parallel/benchmarks/parallel_array/ReducePrime.scala src/scala/collection/parallel/benchmarks/parallel_array/DropMany.scala src/scala/collection/parallel/benchmarks/parallel_array/ReduceList.scala src/scala/collection/parallel/benchmarks/parallel_array/ForeachLight.scala +src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala src/scala/collection/parallel/benchmarks/parallel_array/MatrixMultiplication.scala src/scala/collection/parallel/benchmarks/parallel_array/SliceMedium.scala src/scala/collection/parallel/benchmarks/parallel_array/ReverseMap.scala diff --git a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala index 32c3ca154f..9eacc7ff1f 100644 --- a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala +++ b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala @@ -65,6 +65,7 @@ trait BenchmarkRegister { register(parallel_array.PadToDouble) register(parallel_array.AggregateLight) register(parallel_array.ScanLight) + register(parallel_array.ScanMedium) register(parallel_array.MatrixMultiplication) // parallel views diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala index b5dcfca872..f151158ad9 100644 --- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala +++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala @@ -9,6 +9,8 @@ object ForeachHeavy extends Companion { override def comparisons = List("jsr") override def defaultSize = 2048 + @volatile var z = 0 + val fun = (a: Cont) => heavyOperation(a) val funjsr = new extra166y.Ops.Procedure[Cont] { def op(a: Cont) = heavyOperation(a) @@ -26,6 +28,7 @@ object ForeachHeavy extends Companion { if (n % i == 0) isPrime = false i += 1 } + if (isPrime && (n.toString == z)) z += 1 isPrime } } diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala new file mode 100644 index 0000000000..73a237189f --- /dev/null +++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala @@ -0,0 +1,55 @@ +package scala.collection.parallel.benchmarks.parallel_array + + +import scala.collection.parallel.benchmarks._ +import scala.collection.parallel.mutable.ParArray + + +object ScanMedium extends Companion { + def benchName = "scan-medium"; + def apply(sz: Int, parallelism: Int, what: String) = new ScanMedium(sz, parallelism, what) + override def comparisons = List("jsr") + override def defaultSize = 5000 + + val op = (a: Cont, b: Cont) => { + operation(a, b) + } + def operation(a: Cont, b: Cont) = { + val m = if (a.in < 0) 1 else 0 + val k = calc(a.in, b.in, m) + new Cont(a.in + b.in + k * m * (0 until 2).reduceLeft(_ + _)) + } + private def calc(x: Int, y: Int, n: Int) = { + var sum = x + for (i <- 0 until 500) { + sum += y + (if (sum % 2 == 0) n * x else y) + if (sum % 5 == 0) sum -= x * y - n * (x + y) + } + sum + } +} + + +class ScanMedium(sz: Int, p: Int, what: String) +extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) { + def companion = ScanMedium + override def repetitionsPerRun = 50 + override val runs = 12 + + def runpar = pa.scan(new Cont(0))(ScanMedium.op) + def runseq = sequentialScan(new Cont(0), ScanMedium.op, sz) + def runjsr = jsrarr.cumulate(new extra166y.Ops.Reducer[Cont] { + def op(a: Cont, b: Cont) = ScanMedium.operation(a, b) + }, new Cont(0)) + override def comparisonMap = collection.Map("jsr" -> runjsr _) +} + + + + + + + + + + diff --git a/test/files/scalacheck/parallel-collections/IntOperators.scala b/test/files/scalacheck/parallel-collections/IntOperators.scala index 690ee34cca..24330d7670 100644 --- a/test/files/scalacheck/parallel-collections/IntOperators.scala +++ b/test/files/scalacheck/parallel-collections/IntOperators.scala @@ -49,7 +49,8 @@ trait IntOperators extends Operators[Int] { def foldArguments = List( (0, _ + _), (1, _ * _), - (Int.MinValue, math.max(_, _)) + (Int.MinValue, math.max(_, _)), + (Int.MaxValue, math.min(_, _)) ) def addAllTraversables = List( List[Int](), diff --git a/test/files/scalacheck/parallel-collections/Operators.scala b/test/files/scalacheck/parallel-collections/Operators.scala index 538cc23325..b4321cf805 100644 --- a/test/files/scalacheck/parallel-collections/Operators.scala +++ b/test/files/scalacheck/parallel-collections/Operators.scala @@ -32,4 +32,4 @@ trait SeqOperators[T] extends Operators[T] { def reverseMapFunctions: List[T => T] def sameElementsSeqs: List[Seq[T]] def startEndSeqs: List[Seq[T]] -}
\ No newline at end of file +} diff --git a/test/files/scalacheck/parallel-collections/ParallelHashMapCheck.scala b/test/files/scalacheck/parallel-collections/ParallelHashMapCheck.scala index 061bb08d9b..9299a201a1 100644 --- a/test/files/scalacheck/parallel-collections/ParallelHashMapCheck.scala +++ b/test/files/scalacheck/parallel-collections/ParallelHashMapCheck.scala @@ -64,23 +64,23 @@ with PairValues[Int, Int] } override def checkDataStructureInvariants(orig: Traversable[(Int, Int)], ds: AnyRef) = ds match { - case pm: ParHashMap[k, v] if 1 == 0 => // disabled this to make tests faster - val invs = pm.brokenInvariants - - val containsall = (for ((k, v) <- orig) yield { - if (pm.asInstanceOf[ParHashMap[Int, Int]].get(k) == Some(v)) true - else { - println("Does not contain original element: " + (k, v)) - false - } - }).foldLeft(true)(_ && _) - - - if (invs.isEmpty) containsall - else { - println("Invariants broken:\n" + invs.mkString("\n")) - false - } + // case pm: ParHashMap[k, v] if 1 == 0 => // disabled this to make tests faster + // val invs = pm.brokenInvariants + + // val containsall = (for ((k, v) <- orig) yield { + // if (pm.asInstanceOf[ParHashMap[Int, Int]].get(k) == Some(v)) true + // else { + // println("Does not contain original element: " + (k, v)) + // false + // } + // }).foldLeft(true)(_ && _) + + + // if (invs.isEmpty) containsall + // else { + // println("Invariants broken:\n" + invs.mkString("\n")) + // false + // } case _ => true } diff --git a/test/files/scalacheck/parallel-collections/ParallelHashSetCheck.scala b/test/files/scalacheck/parallel-collections/ParallelHashSetCheck.scala index be70a7c7a3..8b41908a26 100644 --- a/test/files/scalacheck/parallel-collections/ParallelHashSetCheck.scala +++ b/test/files/scalacheck/parallel-collections/ParallelHashSetCheck.scala @@ -56,28 +56,28 @@ with IntValues } override def checkDataStructureInvariants(orig: Traversable[Int], ds: AnyRef) = ds match { - case pm: ParHashSet[t] => - // for an example of how not to write code proceed below - val invs = pm.brokenInvariants - - val containsall = (for (elem <- orig) yield { - if (pm.asInstanceOf[ParHashSet[Int]](elem) == true) true - else { - println("Does not contain original element: " + elem) - println(pm.hashTableContents.table.find(_ == elem)) - println(pm.hashTableContents.table.indexOf(elem)) - false - } - }).foldLeft(true)(_ && _) - - - if (invs.isEmpty) { - if (!containsall) println(pm.debugInformation) - containsall - } else { - println("Invariants broken:\n" + invs.mkString("\n")) - false - } + // case pm: ParHashSet[t] if 1 == 0 => + // // for an example of how not to write code proceed below + // val invs = pm.brokenInvariants + + // val containsall = (for (elem <- orig) yield { + // if (pm.asInstanceOf[ParHashSet[Int]](elem) == true) true + // else { + // println("Does not contain original element: " + elem) + // println(pm.hashTableContents.table.find(_ == elem)) + // println(pm.hashTableContents.table.indexOf(elem)) + // false + // } + // }).foldLeft(true)(_ && _) + + + // if (invs.isEmpty) { + // if (!containsall) println(pm.debugInformation) + // containsall + // } else { + // println("Invariants broken:\n" + invs.mkString("\n")) + // false + // } case _ => true } diff --git a/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala b/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala index 8b5d72ea01..0dcd877ecb 100644 --- a/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala +++ b/test/files/scalacheck/parallel-collections/ParallelIterableCheck.scala @@ -398,6 +398,22 @@ abstract class ParallelIterableCheck[T](collName: String) extends Properties(col tarr.toSeq == collarr.toSeq } + if (hasStrictOrder) property("scans must be equal") = forAll(collectionPairs) { + case (t, coll) => + (for (((first, op), ind) <- foldArguments.zipWithIndex) yield { + val tscan = t.scanLeft(first)(op) + val cscan = coll.scan(first)(op) + if (tscan != cscan || cscan != tscan) { + println("from: " + t) + println("and: " + coll) + println("scans are: ") + println(tscan) + println(cscan) + } + ("operator " + ind) |: tscan == cscan && cscan == tscan + }).reduceLeft(_ && _) + } + } |