diff options
author | Martin Odersky <odersky@gmail.com> | 2009-11-15 14:17:48 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2009-11-15 14:17:48 +0000 |
commit | 046bbed8b7afdb13af1b3f35daf44b72d3a7936d (patch) | |
tree | c544987163a119190436d80d5b18bc6a939f8373 /test/files/bench/equality/eqeq.scala | |
parent | 0c373e49859b872e339a3e86216d0f2d7c471454 (diff) | |
download | scala-046bbed8b7afdb13af1b3f35daf44b72d3a7936d.tar.gz scala-046bbed8b7afdb13af1b3f35daf44b72d3a7936d.tar.bz2 scala-046bbed8b7afdb13af1b3f35daf44b72d3a7936d.zip |
Added benchmarks with results for equality.
Diffstat (limited to 'test/files/bench/equality/eqeq.scala')
-rwxr-xr-x | test/files/bench/equality/eqeq.scala | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/files/bench/equality/eqeq.scala b/test/files/bench/equality/eqeq.scala new file mode 100755 index 0000000000..afccece88a --- /dev/null +++ b/test/files/bench/equality/eqeq.scala @@ -0,0 +1,46 @@ +/** benchmark for testing equality. + * Mix: == between non-numbers ith Object.equals as equality: 66% + * 50% of these are tests where eq is true. + * == between boxed integers: 17% + * == between boxed characters: 5% + * == between boxed bytes: 5% + * == between boxed longs: 5% + * == between boxed shorts: < 1% + * == between boxed floats: < 1% + * == between boxed doubles: < 1% + * In all cases 50% of the tests return true. + */ +object eqeq extends testing.Benchmark { + + def eqeqtest[T](creator: Int => T, n: Int): Int = { + val elems = Array.tabulate[AnyRef](n)(i => creator(i % 2).asInstanceOf[AnyRef]) + + var sum = 0 + var i = 0 + while (i < n) { + var j = 0 + while (j < n) { + if (elems(i) == elems(j)) sum += 1 + j += 1 + } + i += 1 + } + sum + } + + val obj1 = new Object + val obj2 = new Object + + def run() { + var sum = 0 + sum += eqeqtest(x => if (x == 0) obj1 else obj2, 2000) + sum += eqeqtest(x => x, 1000) + sum += eqeqtest(x => x.toChar, 550) + sum += eqeqtest(x => x.toByte, 550) + sum += eqeqtest(x => x.toLong, 550) + sum += eqeqtest(x => x.toShort, 100) + sum += eqeqtest(x => x.toFloat, 100) + sum += eqeqtest(x => x.toDouble, 100) + assert(sum == 2968750) + } +} |