summaryrefslogtreecommitdiff
path: root/test/files
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-11-09 22:03:12 +0000
committerPaul Phillips <paulp@improving.org>2009-11-09 22:03:12 +0000
commita0159da70da18f65863947aa4d016ca52fd7bb4f (patch)
tree916acfd275d3c0bf3c59aa9d599fed37162c2c9a /test/files
parent26a13165f4a00ce8c0336058fbde937ddb59e718 (diff)
downloadscala-a0159da70da18f65863947aa4d016ca52fd7bb4f.tar.gz
scala-a0159da70da18f65863947aa4d016ca52fd7bb4f.tar.bz2
scala-a0159da70da18f65863947aa4d016ca52fd7bb4f.zip
Breaks down the hash function in BoxesRunTime b...
Breaks down the hash function in BoxesRunTime by type so we can do as much as possible at compile time. Documents various trouble points I've identified with trying to get the hashCodes aligned. Test case exercises the hashCode functions. Deleted all the code associated with previous equality adventures. Don't worry, I can put anything back if it turns out we have to change course again, but for now it's noise. Also, gives return types to the box and unbox methods which are added to the primitive companions, so e.g. Int.box(5) now returns a j.l.Integer instead of an Object.
Diffstat (limited to 'test/files')
-rw-r--r--test/files/run/hashCodeBoxesRunTime.scala28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/files/run/hashCodeBoxesRunTime.scala b/test/files/run/hashCodeBoxesRunTime.scala
new file mode 100644
index 0000000000..3eacacb663
--- /dev/null
+++ b/test/files/run/hashCodeBoxesRunTime.scala
@@ -0,0 +1,28 @@
+// This only tests direct access to the methods in BoxesRunTime,
+// not the whole scheme.
+object Test
+{
+ import java.{ lang => jl }
+ import scala.runtime.BoxesRunTime.{ hashFromNumber, hashFromObject }
+
+ def allSame[T](xs: List[T]) = assert(xs.removeDuplicates.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 hashFromNumber)
+
+ def main(args: Array[String]): Unit = {
+ List(Byte.MinValue, -1, 0, 1, Byte.MaxValue) foreach { n =>
+ val hashes = mkNumbers(n) map hashFromNumber
+ allSame(hashes)
+ if (n >= 0) {
+ val charCode = hashFromObject(n.toChar: Character)
+ assert(charCode == hashes.head)
+ }
+ }
+
+ testLDF(Short.MaxValue.toLong)
+ testLDF(Short.MinValue.toLong)
+ }
+}