summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2011-09-28 15:42:42 +0000
committerAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2011-09-28 15:42:42 +0000
commitf7a4cdd56ffa204b514c3ab1c2b9218ac3679178 (patch)
tree25fe280821cb4b9ad574ab4f163f92206579d122
parentc567ad09224a906ffb60c210a49e8c10c6a55c04 (diff)
downloadscala-f7a4cdd56ffa204b514c3ab1c2b9218ac3679178.tar.gz
scala-f7a4cdd56ffa204b514c3ab1c2b9218ac3679178.tar.bz2
scala-f7a4cdd56ffa204b514c3ab1c2b9218ac3679178.zip
Fixes #4895.
The size map size computation for parallel hash sets was invalid. No review.
-rw-r--r--src/library/scala/collection/mutable/FlatHashTable.scala8
-rw-r--r--src/library/scala/collection/mutable/HashSet.scala2
-rw-r--r--test/files/run/t4895.scala20
3 files changed, 28 insertions, 2 deletions
diff --git a/src/library/scala/collection/mutable/FlatHashTable.scala b/src/library/scala/collection/mutable/FlatHashTable.scala
index 3118d6aa31..0b8ca66c55 100644
--- a/src/library/scala/collection/mutable/FlatHashTable.scala
+++ b/src/library/scala/collection/mutable/FlatHashTable.scala
@@ -231,7 +231,7 @@ trait FlatHashTable[A] extends FlatHashTable.HashUtils[A] {
else java.util.Arrays.fill(sizemap, 0)
}
- private[collection] final def totalSizeMapBuckets = if (sizeMapBucketSize < table.length) 1 else table.length / sizeMapBucketSize
+ private[collection] final def totalSizeMapBuckets = (table.length - 1) / sizeMapBucketSize + 1
protected def calcSizeMapSize(tableLength: Int) = (tableLength >> sizeMapBucketBitSize) + 1
@@ -264,7 +264,11 @@ trait FlatHashTable[A] extends FlatHashTable.HashUtils[A] {
}
private[collection] def printSizeMap() {
- println(sizemap.toList)
+ println(sizemap.mkString("szmap: [", ", ", "]"))
+ }
+
+ private[collection] def printContents() {
+ println(table.mkString("[", ", ", "]"))
}
protected def sizeMapDisable() = sizemap = null
diff --git a/src/library/scala/collection/mutable/HashSet.scala b/src/library/scala/collection/mutable/HashSet.scala
index 134558ad15..853becbf43 100644
--- a/src/library/scala/collection/mutable/HashSet.scala
+++ b/src/library/scala/collection/mutable/HashSet.scala
@@ -55,11 +55,13 @@ extends Set[A]
def contains(elem: A): Boolean = containsEntry(elem)
def += (elem: A): this.type = { addEntry(elem); this }
+
def -= (elem: A): this.type = { removeEntry(elem); this }
override def par = new ParHashSet(hashTableContents)
override def add(elem: A): Boolean = addEntry(elem)
+
override def remove(elem: A): Boolean = removeEntry(elem).isDefined
override def clear() = clearTable()
diff --git a/test/files/run/t4895.scala b/test/files/run/t4895.scala
new file mode 100644
index 0000000000..14f6761209
--- /dev/null
+++ b/test/files/run/t4895.scala
@@ -0,0 +1,20 @@
+
+
+
+
+object Test {
+
+ def checkPar(sz: Int) {
+ import collection._
+ val hs = mutable.HashSet[Int]() ++ (1 to sz)
+ assert(hs.par.map(_ + 1).seq.toSeq.sorted == (2 to (sz + 1)))
+ }
+
+ def main(args: Array[String]) {
+ for (i <- 0 until 100) checkPar(i)
+ for (i <- 100 until 1000 by 50) checkPar(i)
+ for (i <- 1000 until 10000 by 500) checkPar(i)
+ for (i <- 10000 until 100000 by 5000) checkPar(i)
+ }
+
+}