diff options
author | James Iry <james.iry@typesafe.com> | 2013-01-03 15:55:18 -0800 |
---|---|---|
committer | James Iry <james.iry@typesafe.com> | 2013-01-03 15:55:18 -0800 |
commit | 016763cc3a3045cdc0ae21007f50ae52c3c7d642 (patch) | |
tree | c4aeb736fdd6dfc7a0361041d653732fc72602ab /test/files/run/hashset.scala | |
parent | 666572261c41cc92b06c03bf4aa260c198240cd8 (diff) | |
download | scala-016763cc3a3045cdc0ae21007f50ae52c3c7d642.tar.gz scala-016763cc3a3045cdc0ae21007f50ae52c3c7d642.tar.bz2 scala-016763cc3a3045cdc0ae21007f50ae52c3c7d642.zip |
SI-6908 Makes FlatHashTable as well as derived classes support null values
This change adds a null sentinel object which is used to indicate that a null
value has been inserted in FlatHashTable. It also makes a strong distinction
between logical elements of the Set vs entries in the hash table. Changes
are made to mutable.HashSet and ParHashSet accordingly.
Diffstat (limited to 'test/files/run/hashset.scala')
-rw-r--r-- | test/files/run/hashset.scala | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/files/run/hashset.scala b/test/files/run/hashset.scala new file mode 100644 index 0000000000..299dce3aec --- /dev/null +++ b/test/files/run/hashset.scala @@ -0,0 +1,48 @@ +import scala.collection.generic.{Growable, Shrinkable} +import scala.collection.GenSet +import scala.collection.mutable.FlatHashTable +import scala.collection.mutable.HashSet +import scala.collection.parallel.mutable.ParHashSet + +object Test extends App { + test(new Creator{ + def create[A] = new HashSet[A] + def hashSetType = "HashSet" + }) + + test(new Creator{ + def create[A] = new ParHashSet[A] + def hashSetType = "ParHashSet" + }) + + + def test(creator : Creator) { + println("*** " + creator.hashSetType + " primitives") + val h1 = creator.create[Int] + for (i <- 0 until 20) h1 += i + println((for (i <- 0 until 20) yield i + " " + (h1 contains i)).toList.sorted mkString(",")) + println((for (i <- 20 until 40) yield i + " " + (h1 contains i)).toList.sorted mkString(",")) + println(h1.toList.sorted mkString ",") + println + + println("*** " + creator.hashSetType + " Strings with null") + val h2 = creator.create[String] + h2 += null + for (i <- 0 until 20) h2 += "" + i + println("null " + (h2 contains null)) + println((for (i <- 0 until 20) yield i + " " + (h2 contains ("" + i))).toList.sorted mkString(",")) + println((for (i <- 20 until 40) yield i + " " + (h2 contains ("" + i))).toList.sorted mkString(",")) + println((h2.toList map {x => "" + x}).sorted mkString ",") + + h2 -= null + h2 -= "" + 0 + println("null " + (h2 contains null)) + println((for (i <- 0 until 20) yield i + " " + (h2 contains ("" + i))).toList.sorted mkString(",")) + println + } + + trait Creator { + def create[A] : GenSet[A] with Cloneable with FlatHashTable[A] with Growable[A] with Shrinkable[A] + def hashSetType : String + } +}
\ No newline at end of file |