summaryrefslogtreecommitdiff
path: root/test/files/run/hashCodeStatics.scala
diff options
context:
space:
mode:
authorSébastien Doeraene <sjrdoeraene@gmail.com>2016-04-20 15:12:14 +0200
committerSébastien Doeraene <sjrdoeraene@gmail.com>2016-04-21 15:23:11 +0200
commitcce701650143d13c8b292bffd590bf7c8eb532d7 (patch)
treee40e190c59564db46238737c9017ee59d5d03bef /test/files/run/hashCodeStatics.scala
parent8a4653637a2b693cdcc730a93e17badaac14d56e (diff)
downloadscala-cce701650143d13c8b292bffd590bf7c8eb532d7.tar.gz
scala-cce701650143d13c8b292bffd590bf7c8eb532d7.tar.bz2
scala-cce701650143d13c8b292bffd590bf7c8eb532d7.zip
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.
Diffstat (limited to 'test/files/run/hashCodeStatics.scala')
-rw-r--r--test/files/run/hashCodeStatics.scala28
1 files changed, 28 insertions, 0 deletions
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)
+ }
+}