summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-02-14 18:37:56 +0100
committerMartin Odersky <odersky@gmail.com>2012-02-14 18:37:56 +0100
commitea96b48d9274e90b64b66e51507460c004c01643 (patch)
tree0ee4f7f9f1283c6fa1b510a16e8942ef74e1e08d /test
parent5bbc2d089f0f440612d6219479ea8e5cea0f01a4 (diff)
downloadscala-ea96b48d9274e90b64b66e51507460c004c01643.tar.gz
scala-ea96b48d9274e90b64b66e51507460c004c01643.tar.bz2
scala-ea96b48d9274e90b64b66e51507460c004c01643.zip
Changed erasure behavior of arrays to use always boxed representation.
Conflicts: test/files/run/Meter.scala
Diffstat (limited to 'test')
-rw-r--r--test/files/run/Meter.scala41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/files/run/Meter.scala b/test/files/run/Meter.scala
index 0db917aeee..66d35bfc75 100644
--- a/test/files/run/Meter.scala
+++ b/test/files/run/Meter.scala
@@ -6,6 +6,28 @@ class Meter(val underlying: Double) extends AnyVal with Printable {
def < (other: Meter): Boolean = this.underlying < other.underlying
override def toString: String = underlying.toString+"m"
}
+object Meter extends (Double => Meter) {
+
+ def apply(x: Double): Meter = new Meter(x)
+
+ class FlatArray(underlying: Array[Double]) {
+ def length = underlying.length
+ def apply(i: Int): Meter = new Meter(underlying(i))
+ def update(i: Int, m: Meter) = underlying(i) = m.underlying
+ override def toString = underlying.toList map Meter mkString ("Meter.FlatArray(", ", ", ")")
+ }
+
+ object FlatArray {
+
+ def apply(xs: Meter*) = {
+ val elems = Array.ofDim[Double](xs.length)
+ for (i <- 0 until xs.length)
+ elems(i) = xs(i).asInstanceOf[Double]
+ new FlatArray(elems)
+ }
+ }
+
+}
trait Printable extends Any { def print: Unit = Console.print(this) }
object Test extends App {
@@ -37,5 +59,24 @@ object Test extends App {
val b: Any = y
println("a == b: "+(a == b))
+ {
val arr = Array(x, y + x)
+ println(arr.deep)
+ def foo[T <: Printable](x: Array[T]) {
+ for (i <- 0 until x.length) { x(i).print; println(" "+x(i)) }
+ }
+ val m = arr(0)
+ println(m)
+ foo(arr)
+ }
+
+ val arr = Meter.FlatArray(x, y + x)
+ println(arr)
+ def foo(x: Meter.FlatArray) {
+ for (i <- 0 until x.length) { x(i).print; println(" "+x(i)) }
+ }
+ val m = arr(0)
+ println(m)
+ foo(arr)
+
}