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
|
case class Foo[T](a: Boolean, b: Byte, c: Short, d: Char, e: Int, f: Long, g: Double, h: Float, i: AnyRef, j: T) { }
object Test {
def mkFoo[T](x: T) = Foo[T](true, -1, -1, 100, -5, -10, 500d, 500f, Nil, x)
def main(args: Array[String]): Unit = {
val foo1 = mkFoo[Double](5.0d)
val foo2 = mkFoo[Long](5l)
List(foo1, foo2, foo1.##, foo2.##, foo1 == foo2) foreach println
println("## method 1: " + foo1.##)
println("## method 2: " + foo2.##)
println(" Murmur 1: " + scala.util.hashing.MurmurHash3.productHash(foo1))
println(" Murmur 2: " + scala.util.hashing.MurmurHash3.productHash(foo2))
}
}
object Timing {
var hash = 0
def mkFoo(i: Int) = Foo(i % 2 == 0, i.toByte, i.toShort, i.toChar, i, i, 1.1, 1.1f, this, this)
def main(args: Array[String]): Unit = {
val reps = if (args.isEmpty) 100000000 else args(0).toInt
val start = System.nanoTime
println("Warmup.")
1 to 10000 foreach mkFoo
hash = 0
1 to reps foreach (i => hash += mkFoo(i).##)
val end = System.nanoTime
println("hash = " + hash)
println("Elapsed: " + ((end - start) / 1e6) + " ms.")
}
}
|