From 2970a618827e4d12d334296958bac2c0b6cc80f6 Mon Sep 17 00:00:00 2001 From: Antonio Cunei Date: Thu, 12 Nov 2009 22:51:49 +0000 Subject: Merged revisions 19598-19601,19604 via svnmerge... Merged revisions 19598-19601,19604 via svnmerge from https://lampsvn.epfl.ch/svn-repos/scala/scala/trunk ........ r19598 | moors | 2009-11-12 22:04:25 +0100 (Thu, 12 Nov 2009) | 1 line documentation for fix of #2482 ........ r19599 | moors | 2009-11-12 22:04:26 +0100 (Thu, 12 Nov 2009) | 1 line Merge branch 'ticket/2594' ........ r19600 | extempore | 2009-11-12 22:39:12 +0100 (Thu, 12 Nov 2009) | 2 lines Removed everything deprecated in 2.7.3 or earlier except the lower case primitive type aliases, plus associated fixes. ........ r19601 | extempore | 2009-11-12 22:39:26 +0100 (Thu, 12 Nov 2009) | 2 lines Moved those bits of Predef into the scala package object which would go without a fight. ........ r19604 | extempore | 2009-11-12 23:13:04 +0100 (Thu, 12 Nov 2009) | 4 lines Bringing BigInt and BigDecimal into the club of things which can be equal to one another and which will have the same hashCode. Fixed some old and some new bugs associated with equality. Note: not fully optimized. ........ --- test/files/run/equality.scala | 36 ++++++++++++++++++++++++++++++++++++ test/files/run/t2594_tcpoly.check | 0 test/files/run/t2594_tcpoly.scala | 18 ++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 test/files/run/equality.scala create mode 100644 test/files/run/t2594_tcpoly.check create mode 100644 test/files/run/t2594_tcpoly.scala (limited to 'test') diff --git a/test/files/run/equality.scala b/test/files/run/equality.scala new file mode 100644 index 0000000000..5b9ad207da --- /dev/null +++ b/test/files/run/equality.scala @@ -0,0 +1,36 @@ +// a quickly assembled test of equality. Needs work. +object Test +{ + def makeFromInt(x: Int) = List( + x.toByte, x.toShort, x.toInt, x.toLong, x.toFloat, x.toDouble, BigInt(x), BigDecimal(x) + ) ::: ( + if (x < 0) Nil else List(x.toChar) + ) + def makeFromDouble(x: Double) = List( + x.toShort, x.toInt, x.toLong, x.toFloat, x.toDouble, BigInt(x.toInt), BigDecimal(x) + ) + + def main(args: Array[String]): Unit = { + var xs = makeFromInt(5) + for (x <- xs ; y <- xs) { + assert(x == y, x + " == " + y) + assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y)) + } + + xs = makeFromInt(-5) + for (x <- xs ; y <- xs) { + assert(x == y, x + " == " + y) + assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y)) + } + + xs = makeFromDouble(500.0) + for (x <- xs ; y <- xs) { + assert(x == y, x + " == " + y) + assert(hash(x) == hash(y), "hash(%s) == hash(%s)".format(x, y)) + } + + // negatives + val bigLong = new java.util.concurrent.atomic.AtomicLong(Long.MaxValue) + assert(-1 != bigLong && bigLong != -1) // bigLong.intValue() == -1 + } +} diff --git a/test/files/run/t2594_tcpoly.check b/test/files/run/t2594_tcpoly.check new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/files/run/t2594_tcpoly.scala b/test/files/run/t2594_tcpoly.scala new file mode 100644 index 0000000000..e759ca8b0f --- /dev/null +++ b/test/files/run/t2594_tcpoly.scala @@ -0,0 +1,18 @@ +trait Monad[M[_]] { + def foo[A](a: M[A]): M[A] +} + +class Bar[A, B] +class Bar1[A] { type And[B] = Bar[A, B] } + +object Test { + // the combination of partial applications and anonymous class is essential to reproduce the bug + // problem: missing bridge method + // --> abstractmethoderror `Main$$anon$1.foo(Ljava/lang/Object;)Ljava/lang/Object;` + // the anonymous class only gets `public Bar foo(Bar a)` + def BarMonad[X] = new Monad[Bar1[X]#And] { + def foo[A](a: Bar[X, A]) = a + } + + def main(as: Array[String]) { BarMonad[Int] foo (new Bar[Int, Int]) } +} \ No newline at end of file -- cgit v1.2.3