File: eqeq.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (46 lines) | stat: -rw-r--r-- 1,292 bytes parent folder | download | duplicates (4)
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
35
36
37
38
39
40
41
42
43
44
45
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)
  }
}