diff options
author | Sébastien Doeraene <sjrdoeraene@gmail.com> | 2016-04-20 15:12:14 +0200 |
---|---|---|
committer | Sébastien Doeraene <sjrdoeraene@gmail.com> | 2016-04-21 15:23:11 +0200 |
commit | cce701650143d13c8b292bffd590bf7c8eb532d7 (patch) | |
tree | e40e190c59564db46238737c9017ee59d5d03bef /test/files/run/hashCodeStatics.scala | |
parent | 8a4653637a2b693cdcc730a93e17badaac14d56e (diff) | |
download | scala-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.scala | 28 |
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) + } +} |