summaryrefslogtreecommitdiff
path: root/test/files/run/colltest.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-01-30 15:17:05 +0000
committerMartin Odersky <odersky@gmail.com>2007-01-30 15:17:05 +0000
commit4a64ac9c7b94b249087cd25712dfb547013f5ed4 (patch)
treeaa884033db150ebde48d2027d29bbc5f3723b9f1 /test/files/run/colltest.scala
parent2f4c6a2eb8405eaa6d54a8d29f33f4595da7d1c7 (diff)
downloadscala-4a64ac9c7b94b249087cd25712dfb547013f5ed4.tar.gz
scala-4a64ac9c7b94b249087cd25712dfb547013f5ed4.tar.bz2
scala-4a64ac9c7b94b249087cd25712dfb547013f5ed4.zip
fixed flathashtable.
Diffstat (limited to 'test/files/run/colltest.scala')
-rw-r--r--test/files/run/colltest.scala50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/files/run/colltest.scala b/test/files/run/colltest.scala
new file mode 100644
index 0000000000..024f2fb1f4
--- /dev/null
+++ b/test/files/run/colltest.scala
@@ -0,0 +1,50 @@
+import collection.mutable._
+class TestSet(s0: Set[int], s1: Set[int]) {
+ val Iterations = 1000000
+ val Range = 100000
+ val testEachStep = false
+ val Threshold = 20000
+ val r = new java.util.Random(12345)
+ def test(s: Set[int], n: int): Any = {
+ val v = n >> 3
+ n & 7 match {
+ case 0 | 1 | 2 => s contains v
+ case 3 => s += v
+ case 4 => s -= v
+ case 5 => if (s.size > Threshold) s -= v else s += v
+ case 6 => s += v
+ case 7 => s.size
+ }
+ }
+ def explain(n: int, s: Set[int]): String = n & 7 match {
+ case 0 | 1 | 2 => "contains"
+ case 3 => "add"
+ case 4 => "remove"
+ case 5 => if (s.size > Threshold) "remove" else "add"
+ case 6 => "add"
+ case 7 => "size"
+ }
+ def checkSubSet(pre: String, s0: Set[int], s1: Set[int]) {
+ for (val e <- s0.elements)
+ if (!(s1 contains e)) {
+ assert(false, pre+" element: "+e+"\n S0 = "+s0+"\n S1 = "+s1)
+ }
+ }
+ for (val i <- 0 until Iterations) {
+ val n = r.nextInt(Range)
+ val res0 = test(s0, n)
+ val res1 = test(s1, n)
+ //Console.println("operation = "+explain(n, s0)+", value ="+(n >> 3)+", result0 = "+res0)
+ if (testEachStep) {
+ checkSubSet("superfluous", s0, s1)
+ checkSubSet("missing", s1, s0)
+ }
+ if (res0 != res1)
+ assert(false, "DIFFERENCE , operation = "+explain(n, s0)+", value ="+(n >> 3)+
+ ", result0 = "+res0+", result1 = "+res1)
+ }
+ Console.println("succeeded for "+Iterations+" iterations.")
+}
+object Test extends Application {
+ new TestSet(HashSet.empty, new LinkedHashSet)
+}