From: Alexandre Terrasa Date: Thu, 14 Feb 2013 21:26:02 +0000 (-0500) Subject: benches: added Scala to gen micro benches X-Git-Tag: v0.6~77^2~1 X-Git-Url: http://nitlanguage.org benches: added Scala to gen micro benches Signed-off-by: Alexandre Terrasa --- diff --git a/src/benchs/gen.nit b/src/benchs/gen.nit index 4ba4f7b..74c4b43 100644 --- a/src/benchs/gen.nit +++ b/src/benchs/gen.nit @@ -235,6 +235,90 @@ class Generator file.close end + fun writescala(name: String) + do + var cl = "" + file = new OFStream.open("{name}.scala") + write "object {name} \{" + write "class Root\n\t\{ def id: Int = 0 \}" + for c in classes do + write "class {c} " + if c.supers.is_empty then + write "\textends Root" + else for s in [c.supers.first] do + write "\textends {s}" + end + write "\{" + write "\toverride def id: Int = {c.id}" + write "\}" + end + write "class L[E](var _item: E, var _next: L[E]) extends Root \{" + write "\tdef item: E = _item" + write "\tdef set_item(i: E) = this._item = i" + write "\tdef next: L[E] = _next" + write "\tdef set_next(n: L[E]) = this._next = n" + write "\toverride def id: Int = -1" + write "\}" + + write "def fill: L[Root] = \{" + write "\tvar head: L[Root] = null" + for c in classes do + write "\tvar l{c}: L[{c}] = new L[{c}](new {cl}{c}(), null)" + write "\thead = new L[Root](l{c}, head)" + end + write "\thead = null" + write "\tfor (x <- 0 to {arraylen}) \{" + for i in [0..listlen[ do + var c = unlist[i] + write "\t\tvar l{i}: L[{c}] = new L[{c}](new {cl}{c}(), null)" + write "\t\thead = new L[Root](l{i}, head)" + end + write "\t\}" + write "\treturn head" + write "\}" + + write "def run(head1: L[Root], head2: L[Root]): Int = \{" + write "\tvar cpt: Int = 0" + write "\tvar y: Int = {loops/list.length}" + write "\twhile (y > 0) \{" + write "\tvar n1: L[Root] = head1" + write "\tvar n2: L[Root] = head2" + write "\twhile (n1 != null) \{" + for i in [0..listlen[ do + var c = list[i] + write "\t\tvar l{i}: Root = n1.item" + write "\t\tvar lc{i}: L[{c}] = l{i}.asInstanceOf[L[{c}]]" + write "\t\tvar c{i}: {c} = lc{i}.item" + write "\t\tn1 = n1.next" + if count then + write "\t\tif (c{i}.id == {c.id}) cpt += 1" + end + write "\t\tvar l2_{i}: Root = n2.item" + write "\t\tvar lc2_{i}: L[{c}] = l2_{i}.asInstanceOf[L[{c}]]" + write "\t\tlc2_{i}.set_item(c{i})" + write "\t\tn2 = n2.next" + end + write "\t\}" + write "y -= 1" + write "\}" + write "return cpt" + write "\}" + + write "def main(args: Array[String]) = \{" + write "\tvar head: L[Root] = fill" + write "\tvar loops: Int = 25" + write "\tif (args.length > 0) \{" + write "\t\tloops = Integer.parseInt(args(0))" + write "\t\}" + write "\tfor (x <- 0 to loops) \{" + write "\t\tvar cpt: Int = run(head, head)" + write "\t\tprintln(\"\" + x + \":\\t\" + cpt)" + write "\t\}" + write "\}" + write "\}" + file.close + end + fun writecpp(name: String) do file = new OFStream.open("{name}.cpp") @@ -472,6 +556,7 @@ end g.genhier g.writenit(name) g.writejava(name, true) +g.writescala(name) g.writecpp(name) g.writee("{name}_se", true) g.writee(name, false) diff --git a/src/run_bench.sh b/src/run_bench.sh index ea97f13..b33faf8 100755 --- a/src/run_bench.sh +++ b/src/run_bench.sh @@ -542,6 +542,12 @@ function bench_typetest_languages() bench_command "$b" "" java "${t}_$b" $s done + prepare_res "$name-scala.dat" "scala" "scala" + for b in $seq; do + run_command scalac ${t}_$b.scala + bench_command "$b" "" scala "${t}_$b" $s + done + prepare_res "$name-es.dat" "es" "es" for b in $seq; do run_command ec -clean -finalize ${t}_$b/app${t}_$b.e