summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2004-10-21 09:48:58 +0000
committerIulian Dragos <jaguarul@gmail.com>2004-10-21 09:48:58 +0000
commitd67d3c2ebad1a373c6e8abb7603394f8d7444e1a (patch)
treedeca15d9f28c856c5561b4f1e37528faf8982036 /test
parent1a3fffe3c6f9da08015b0124a9dd844a1d378baa (diff)
downloadscala-d67d3c2ebad1a373c6e8abb7603394f8d7444e1a.tar.gz
scala-d67d3c2ebad1a373c6e8abb7603394f8d7444e1a.tar.bz2
scala-d67d3c2ebad1a373c6e8abb7603394f8d7444e1a.zip
Scala benchmark added.
Diffstat (limited to 'test')
-rw-r--r--test/benchmark/sources/parsers/build.xml37
-rw-r--r--test/benchmark/sources/parsers/parsers.scala124
-rw-r--r--test/benchmark/sources/sort1/build.xml36
-rw-r--r--test/benchmark/sources/sort1/sort1.scala28
-rw-r--r--test/benchmark/sources/sort2/build.xml36
-rw-r--r--test/benchmark/sources/sort2/sort2.scala35
-rw-r--r--test/benchmark/sources/viewtest/build.xml36
-rwxr-xr-xtest/benchmark/sources/viewtest/viewtest.scala52
8 files changed, 384 insertions, 0 deletions
diff --git a/test/benchmark/sources/parsers/build.xml b/test/benchmark/sources/parsers/build.xml
new file mode 100644
index 0000000000..9217ba443e
--- /dev/null
+++ b/test/benchmark/sources/parsers/build.xml
@@ -0,0 +1,37 @@
+<project name="parsers" default="run">
+
+ <import file="../../predef.xml"/>
+
+ <target name="init">
+ <mkdir dir="${benchmark.classes.dir}/${ant.project.name}"/>
+ </target>
+
+
+ <!-- Compile the parsers benchmark without optimizations -->
+ <target name="compile-noopt"
+ description="Compile the ${ant.project.name} benchmark with no optimizations">
+ <compile-benchmark files="${benchmark.sources.dir}/${ant.project.name}/parsers.scala"
+ destination="${benchmark.classes.dir}/${ant.project.name}/noopt"/>
+ </target>
+
+ <!-- Compile the parsers benchmark with optimizations -->
+ <target name="compile-opt"
+ description="Compile the ${ant.project.name} benchmark with opt">
+ <compile-benchmark files="${benchmark.sources.dir}/${ant.project.name}/parsers.scala"
+ destination="${benchmark.classes.dir}/${ant.project.name}/opt"
+ additionalArgs="-separate:no -Xinline"/>
+ </target>
+
+
+ <target name="run" depends="init,compile-noopt,compile-opt"
+ description="Run this benchmark">
+ <run-benchmark location="${benchmark.classes.dir}/${ant.project.name}/noopt"/>
+ <run-benchmark location="${benchmark.classes.dir}/${ant.project.name}/opt"/>
+ </target>
+
+ <target name="clean.benchmark"
+ description="Clean the object files for ${ant.project.name} benchmark">
+ <delete dir="${benchmark.classes.dir}/${ant.project.name}"/>
+ </target>
+
+</project>
diff --git a/test/benchmark/sources/parsers/parsers.scala b/test/benchmark/sources/parsers/parsers.scala
new file mode 100644
index 0000000000..0089982eab
--- /dev/null
+++ b/test/benchmark/sources/parsers/parsers.scala
@@ -0,0 +1,124 @@
+/* __ *\
+** ________ ___ / / ___ Scala benchmark suite **
+** / __/ __// _ | / / / _ | (c) 2003-2004, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+** $Id$
+\* */
+
+package benchmarks;
+
+/** The parsers example from the scala distribution. */
+abstract class Parsers {
+
+ type intype;
+
+ abstract class Parser {
+
+ type Result = Option[intype];
+
+ def apply(in: intype): Result;
+
+ /*** p &&& q applies first p, and if that succeeds, then q
+ */
+ def &&& (def q: Parser) = new Parser {
+ def apply(in: intype): Result = Parser.this.apply(in) match {
+ case None => None
+ case Some(in1) => q(in1)
+ }
+ }
+
+ /*** p ||| q applies first p, and, if that fails, then q.
+ */
+ def ||| (def q: Parser) = new Parser {
+ def apply(in: intype): Result = Parser.this.apply(in) match {
+ case None => q(in)
+ case s => s
+ }
+ }
+ }
+
+ val empty = new Parser {
+ def apply(in: intype): Result = Some(in)
+ }
+
+ val fail = new Parser {
+ def apply(in: intype): Result = None
+ }
+
+ def opt(p: Parser): Parser = p ||| empty; // p? = (p | <empty>)
+ def rep(p: Parser): Parser = opt(rep1(p)); // p* = [p+]
+ def rep1(p: Parser): Parser = p &&& rep(p); // p+ = p p*
+}
+
+abstract class ListParsers extends Parsers {
+
+ def chr(p: char => boolean): Parser;
+
+ def chr(c: char): Parser = chr(d: char => d == c);
+
+ def letter : Parser = chr(Character.isLetter);
+ def digit : Parser = chr(Character.isDigit);
+
+ def ident : Parser = letter &&& rep(letter ||| digit);
+ def number : Parser = digit &&& rep(digit);
+ def list : Parser = chr('(') &&& listElems &&& chr(')');
+ def listElems : Parser = expr &&& (chr(',') &&& listElems ||| empty);
+ def expr : Parser = ident ||| number ||| list;
+}
+
+abstract class ExprParsers extends Parsers {
+ def chr(p: char => boolean): Parser;
+ def chr(c: char): Parser = chr(d: char => d == c);
+
+ def digit : Parser = chr(Character.isDigit);
+ def number : Parser = digit &&& rep(digit);
+ def summand : Parser = number ||| chr('(') &&& expr &&& chr(')');
+ def expr : Parser = summand &&& rep(chr('+') &&& summand)
+}
+
+class ParseString(s: String) extends Parsers {
+ type intype = int;
+ val input = 0;
+ def chr(p: char => boolean) = new Parser {
+ def apply(in: int): Parser#Result =
+ if (in < s.length() && p(s charAt in)) Some(in + 1);
+ else None;
+ }
+}
+
+object TestList {
+
+ def main(args: Array[String]): unit =
+ if (args.length == 1) {
+ val ps = new ListParsers with ParseString(args(0));
+ ps.expr(ps.input) match {
+ case Some(n) =>
+ System.out.println("parsed: " + args(0).substring(0, n));
+ case None =>
+ System.out.println("nothing parsed");
+ }
+ } else System.out.println("usage: java examples.TestList <expr-string>");
+}
+
+object TestExpr {
+
+ def main(args: Array[String]): unit =
+ if (args.length == 1) {
+ val ps = new ExprParsers with ParseString(args(0));
+ ps.expr(ps.input) match {
+ case Some(n) =>
+ System.out.println("parsed: " + args(0).substring(0, n));
+ case None =>
+ System.out.println("nothing parsed");
+ }
+ } else System.out.println("usage: java examples.TestExpr <expr-string>");
+}
+
+object parsers1 with scala.testing.Benchmark {
+ def run: Unit = {
+ TestList.main(Array("(a,b,(1,2))"));
+ TestExpr.main(Array("2+3+(4+1)"))
+ }
+}
diff --git a/test/benchmark/sources/sort1/build.xml b/test/benchmark/sources/sort1/build.xml
new file mode 100644
index 0000000000..31f48144cf
--- /dev/null
+++ b/test/benchmark/sources/sort1/build.xml
@@ -0,0 +1,36 @@
+<project name="sort1" default="run">
+
+ <import file="../../predef.xml"/>
+
+ <target name="init">
+ <mkdir dir="${benchmark.classes.dir}/${ant.project.name}"/>
+ </target>
+
+ <!-- Compile the sort1 benchmark without optimizations -->
+ <target name="compile-noopt"
+ description="Compile the ${ant.project.name} benchmark with no optimizations">
+ <compile-benchmark files="${benchmark.sources.dir}/${ant.project.name}/sort1.scala"
+ destination="${benchmark.classes.dir}/${ant.project.name}/noopt"/>
+ </target>
+
+ <!-- Compile the sort1 benchmark with optimizations -->
+ <target name="compile-opt"
+ description="Compile the ${ant.project.name} benchmark with opt">
+ <compile-benchmark files="${benchmark.sources.dir}/${ant.project.name}/sort1.scala"
+ destination="${benchmark.classes.dir}/${ant.project.name}/opt"
+ additionalArgs="-separate:no -Xinline"/>
+ </target>
+
+
+ <target name="run" depends="init,compile-noopt,compile-opt"
+ description="Run this benchmark">
+ <run-benchmark location="${benchmark.classes.dir}/${ant.project.name}/noopt"/>
+ <run-benchmark location="${benchmark.classes.dir}/${ant.project.name}/opt"/>
+ </target>
+
+ <target name="clean.benchmark"
+ description="Clean the object files for ${ant.project.name} benchmark">
+ <delete dir="${benchmark.classes.dir}/${ant.project.name}"/>
+ </target>
+
+</project>
diff --git a/test/benchmark/sources/sort1/sort1.scala b/test/benchmark/sources/sort1/sort1.scala
new file mode 100644
index 0000000000..6795158a78
--- /dev/null
+++ b/test/benchmark/sources/sort1/sort1.scala
@@ -0,0 +1,28 @@
+/* __ *\
+** ________ ___ / / ___ Scala benchmark suite **
+** / __/ __// _ | / / / _ | (c) 2003-2004, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+** $Id$
+\* */
+
+
+package benchmarks;
+
+/** Quick sort with a functional taste. */
+object sort1 with scala.testing.Benchmark {
+
+ def sort(a: List[Int]): List[Int] = {
+ if (a.length < 2)
+ a
+ else {
+ val pivot = a(a.length / 2);
+ sort(a.filter(x => x < pivot))
+ ::: a.filter(x => x == pivot)
+ ::: sort(a.filter(x => x > pivot))
+ }
+ }
+
+ def run: Unit = sort(List.range(1, 10000));
+}
diff --git a/test/benchmark/sources/sort2/build.xml b/test/benchmark/sources/sort2/build.xml
new file mode 100644
index 0000000000..067b98afb6
--- /dev/null
+++ b/test/benchmark/sources/sort2/build.xml
@@ -0,0 +1,36 @@
+<project name="sort2" default="run">
+ <import file="../../predef.xml"/>
+
+ <target name="init">
+ <mkdir dir="${benchmark.classes.dir}/${ant.project.name}"/>
+ </target>
+
+
+ <!-- Compile the sort2 benchmark without optimizations -->
+ <target name="compile-noopt"
+ description="Compile the ${ant.project.name} benchmark with no optimizations">
+ <compile-benchmark files="${benchmark.sources.dir}/${ant.project.name}/sort2.scala"
+ destination="${benchmark.classes.dir}/${ant.project.name}/noopt"/>
+ </target>
+
+ <!-- Compile the sort2 benchmark with optimizations -->
+ <target name="compile-opt"
+ description="Compile the ${ant.project.name} benchmark with opt">
+ <compile-benchmark files="${benchmark.sources.dir}/${ant.project.name}/sort2.scala"
+ destination="${benchmark.classes.dir}/${ant.project.name}/opt"
+ additionalArgs="-separate:no -Xinline"/>
+ </target>
+
+
+ <target name="run" depends="init,compile-noopt,compile-opt"
+ description="Run this benchmark">
+ <run-benchmark location="${benchmark.classes.dir}/${ant.project.name}/noopt"/>
+ <run-benchmark location="${benchmark.classes.dir}/${ant.project.name}/opt"/>
+ </target>
+
+ <target name="clean.benchmark"
+ description="Clean the object files for ${ant.project.name} benchmark">
+ <delete dir="${benchmark.classes.dir}/${ant.project.name}"/>
+ </target>
+
+</project> \ No newline at end of file
diff --git a/test/benchmark/sources/sort2/sort2.scala b/test/benchmark/sources/sort2/sort2.scala
new file mode 100644
index 0000000000..6c024eab7a
--- /dev/null
+++ b/test/benchmark/sources/sort2/sort2.scala
@@ -0,0 +1,35 @@
+/* __ *\
+** ________ ___ / / ___ Scala benchmark suite **
+** / __/ __// _ | / / / _ | (c) 2003-2004, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+** $Id$
+\* */
+
+package benchmarks;
+
+/** Quick-sort a list of integers, version 2. Taken from the
+ Scala distribution examples. */
+class Sorter {
+
+ def sort(a: List[Int]): List[Int] = {
+ if (a.length < 2)
+ a
+ else {
+ val pivot = a(a.length / 2);
+ def lePivot(x: Int) = x < pivot;
+ def gtPivot(x: Int) = x > pivot;
+ def eqPivot(x: Int) = x == pivot;
+ sort(a filter lePivot)
+ ::: sort(a filter eqPivot)
+ ::: sort(a filter gtPivot)
+ }
+ }
+
+}
+
+object sort2 extends Sorter with scala.testing.Benchmark {
+ def run: Unit = sort(List.range(1,10000));
+
+}
diff --git a/test/benchmark/sources/viewtest/build.xml b/test/benchmark/sources/viewtest/build.xml
new file mode 100644
index 0000000000..0816f75a18
--- /dev/null
+++ b/test/benchmark/sources/viewtest/build.xml
@@ -0,0 +1,36 @@
+<project name="viewtest" default="run">
+
+ <import file="../../predef.xml"/>
+
+ <target name="init">
+ <mkdir dir="${benchmark.classes.dir}/${ant.project.name}"/>
+ </target>
+
+ <!-- Compile the viewtest benchmark without optimizations -->
+ <target name="compile-noopt"
+ description="Compile the ${ant.project.name} benchmark with no optimizations">
+ <compile-benchmark files="${benchmark.sources.dir}/${ant.project.name}/viewtest.scala"
+ destination="${benchmark.classes.dir}/${ant.project.name}/noopt"/>
+ </target>
+
+ <!-- Compile the viewtest benchmark with optimizations -->
+ <target name="compile-opt"
+ description="Compile the ${ant.project.name} benchmark with opt">
+ <compile-benchmark files="${benchmark.sources.dir}/${ant.project.name}/viewtest.scala"
+ destination="${benchmark.classes.dir}/${ant.project.name}/opt"
+ additionalArgs="-separate:no -Xinline"/>
+ </target>
+
+
+ <target name="run" depends="init,compile-noopt,compile-opt"
+ description="Run this benchmark">
+ <run-benchmark location="${benchmark.classes.dir}/${ant.project.name}/noopt"/>
+ <run-benchmark location="${benchmark.classes.dir}/${ant.project.name}/opt"/>
+ </target>
+
+ <target name="clean.benchmark"
+ description="Clean the object files for ${ant.project.name} benchmark">
+ <delete dir="${benchmark.classes.dir}/${ant.project.name}"/>
+ </target>
+
+</project>
diff --git a/test/benchmark/sources/viewtest/viewtest.scala b/test/benchmark/sources/viewtest/viewtest.scala
new file mode 100755
index 0000000000..82807808bd
--- /dev/null
+++ b/test/benchmark/sources/viewtest/viewtest.scala
@@ -0,0 +1,52 @@
+/* __ *\
+** ________ ___ / / ___ Scala benchmark suite **
+** / __/ __// _ | / / / _ | (c) 2003-2004, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+** $Id$
+\* */
+
+package benchmarks;
+
+/* View test class from the scala test suite */
+
+trait Ordered[a] {
+ def < (x: a): boolean;
+}
+
+object O {
+ def view (x: String): Ordered[String] = new Ordered[String] {
+ def < (y: String) = x.compareTo(y) < 0;
+ }
+}
+
+object Empty extends Tree[All];
+case class Node[+c <% Ordered[c]](elem: c, l: Tree[c], r: Tree[c]) extends Tree[c];
+
+trait Tree[+a <% Ordered[a]] {
+ def insert[b >: a <% Ordered[b]](x: b): Tree[b] = this match {
+ case Empty => new Node(x, Empty, Empty)
+ case Node(elem, l, r) =>
+ if (x == elem) this
+ else if (x < elem) Node(elem, l insert x, r)
+ else Node(elem, l, r insert x);
+ }
+ def elements: List[a] = this match {
+ case Empty => List()
+ case Node(elem, l, r) =>
+ l.elements ::: List(elem) ::: r.elements
+ }
+}
+
+object viewtest1 with scala.testing.Benchmark {
+ import O.view;
+
+ def run: Unit = {
+ var t: Tree[String] = Empty;
+ val args = List("1", "2", "3", "4", "5", "7", "8", "9", "10");
+ for (val s <- args) {
+ t = t insert s
+ }
+ }
+}