summaryrefslogtreecommitdiff
path: root/test/files/bench/equality/eq.scala
blob: 4e57a81734749151cdb05ecce33cb67acbdf3f27 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
object eq extends testing.Benchmark {

  def eqtest[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) eq elems(j)) sum += 1
        j += 1
      }
      i += 1
    }
    sum
  }

  val obj1 = new Object
  val obj2 = new Object

  def run() {
    var sum = 0
    sum += eqtest(x => if (x == 0) obj1 else obj2, 2000)
    sum += eqtest(x => x, 1000)
    sum += eqtest(x => x.toChar, 550)
    sum += eqtest(x => x.toByte, 550)
    sum += eqtest(x => x.toLong, 550)
    sum += eqtest(x => x.toShort, 100)
    sum += eqtest(x => x.toFloat, 100)
    sum += eqtest(x => x.toDouble, 100)
    assert(sum == 2958950)
  }
}