From cce701650143d13c8b292bffd590bf7c8eb532d7 Mon Sep 17 00:00:00 2001 From: Sébastien Doeraene Date: Wed, 20 Apr 2016 15:12:14 +0200 Subject: Remove the duplicate implem of hash codes for numbers. Previously, there were two separate implementations of hash code for boxed number classes: * One in Statics, used by the codegen of case class methods. * One in ScalaRunTime + BoxesRunTime, used by everything else. This commit removes the variant implemented in ScalaRunTime + BoxesRunTime, and always uses Statics instead. We use Statics because the one from ScalaRunTime causes an unnecessary module load. The entry point ScalaRunTime.hash() is kept, as deprecated, for bootstrapping reasons. --- test/files/run/hashCodeStatics.scala | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 test/files/run/hashCodeStatics.scala (limited to 'test/files/run/hashCodeStatics.scala') diff --git a/test/files/run/hashCodeStatics.scala b/test/files/run/hashCodeStatics.scala new file mode 100644 index 0000000000..bff62cce18 --- /dev/null +++ b/test/files/run/hashCodeStatics.scala @@ -0,0 +1,28 @@ +// This only tests direct access to the methods in Statics, +// not the whole scheme. +object Test +{ + import java.{ lang => jl } + import scala.runtime.Statics.anyHash + + def allSame[T](xs: List[T]) = assert(xs.distinct.size == 1, "failed: " + xs) + + def mkNumbers(x: Int): List[Number] = + List(x.toByte, x.toShort, x, x.toLong, x.toFloat, x.toDouble) + + def testLDF(x: Long) = allSame(List[Number](x, x.toDouble, x.toFloat) map anyHash) + + def main(args: Array[String]): Unit = { + List(Byte.MinValue, -1, 0, 1, Byte.MaxValue) foreach { n => + val hashes = mkNumbers(n) map anyHash + allSame(hashes) + if (n >= 0) { + val charCode = anyHash(n.toChar: Character) + assert(charCode == hashes.head) + } + } + + testLDF(Short.MaxValue.toLong) + testLDF(Short.MinValue.toLong) + } +} -- cgit v1.2.3