benches: added Scala to gen micro benches
authorAlexandre Terrasa <alexandre@moz-code.org>
Thu, 14 Feb 2013 21:26:02 +0000 (16:26 -0500)
committerAlexandre Terrasa <alexandre@moz-code.org>
Mon, 11 Mar 2013 19:49:13 +0000 (15:49 -0400)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

src/benchs/gen.nit
src/run_bench.sh

index 4ba4f7b..74c4b43 100644 (file)
@@ -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)
index ea97f13..b33faf8 100755 (executable)
@@ -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