summaryrefslogtreecommitdiff
path: root/test/files/pos/spec-funs.scala
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2009-06-18 17:19:55 +0000
committerIulian Dragos <jaguarul@gmail.com>2009-06-18 17:19:55 +0000
commit3ee6b3653f8c25d7d6b19b9f5d4af7fa082146a8 (patch)
treee97b8c0dd8d61e82f825f528f98842f777621f7a /test/files/pos/spec-funs.scala
parentbe8e3c69114da5bc3020d5363b338b1c83aa22ef (diff)
downloadscala-3ee6b3653f8c25d7d6b19b9f5d4af7fa082146a8.tar.gz
scala-3ee6b3653f8c25d7d6b19b9f5d4af7fa082146a8.tar.bz2
scala-3ee6b3653f8c25d7d6b19b9f5d4af7fa082146a8.zip
Specialization landed in trunk.
Diffstat (limited to 'test/files/pos/spec-funs.scala')
-rw-r--r--test/files/pos/spec-funs.scala63
1 files changed, 63 insertions, 0 deletions
diff --git a/test/files/pos/spec-funs.scala b/test/files/pos/spec-funs.scala
new file mode 100644
index 0000000000..5fea5e9560
--- /dev/null
+++ b/test/files/pos/spec-funs.scala
@@ -0,0 +1,63 @@
+trait AbsFunction1[@specialized -T, @specialized +U] {
+ def apply(x: T): U
+}
+
+final class IntTest {
+
+ val niters = 10000
+
+ def transF(xs: Array[Int], f: AbsFunction1[Int, Int]) = {
+ var i = 0
+ var s = 0
+ while (i < xs.length) {
+ xs(i) = f(xs(i)) + 1
+ i += 1
+ }
+ }
+
+ def run() {
+ val xs = new Array[Int](10000)
+ val f = new AbsFunction1[Int, Int] {
+ def apply(x: Int): Int = x * x
+ }
+ for (j <- 0 until niters) {
+ transF(xs, f)
+ }
+ var acc = 0
+ for (i <- 0 until xs.length) acc += xs(i)
+ println(acc)
+ }
+}
+
+final class ClosureTest {
+
+ val niters = 10000
+
+ def transF(xs: Array[Int], f: Int => Int) = {
+ var i = 0
+ var s = 0
+ while (i < xs.length) {
+ xs(i) = f.apply(xs(i)) + 1
+ i += 1
+ }
+ }
+
+ def run() {
+ val xs = new Array[Int](10000)
+// val f = (x: Int) => x * x
+ for (j <- 0 until niters) {
+ transF(xs, x => x * x)
+ }
+ var acc = 0
+ for (i <- 0 until xs.length) acc += xs(i)
+ println(acc)
+ }
+}
+
+object TestInt extends testing.Benchmark {
+ def run() = (new IntTest).run()
+}
+
+object TestClosure extends testing.Benchmark {
+ def run() = (new ClosureTest).run()
+}