bench/lang: add covar/depthnot and fts_nesting
authorJean Privat <jean@pryen.org>
Tue, 23 Apr 2013 17:12:20 +0000 (13:12 -0400)
committerJean Privat <jean@pryen.org>
Mon, 15 Jul 2013 18:20:57 +0000 (14:20 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

benchmarks/languages/bench_base.nit
benchmarks/languages/bench_typetest_covar.nit [new file with mode: 0644]
benchmarks/languages/bench_typetest_depth_not.nit [new file with mode: 0644]
benchmarks/languages/bench_typetest_fts_nesting.nit [new file with mode: 0644]

index 7258d18..ce9e3f1 100644 (file)
@@ -26,7 +26,7 @@ class Generator
        var classes = new Array[Klass]
 
        var dept writable = 5
-       var loops writable = 20000
+       var loops writable = 50000
        var middle writable = 0
        var dry writable = false
        var check writable = false
@@ -88,7 +88,7 @@ class Generator
                write "\t\tif {test} and x >= 0 then"
                if check then write "\t\tx += 1"
                write "\telse"
-               write "\t\t\tx -= 1"
+               write "\t\t\tx = x - 1 + i - j"
                write "\t\t\ta = b"
                write "\t\tend"
                write "\t\tj += 1"
@@ -166,8 +166,9 @@ class Generator
                var test = "true"
                if not dry then test = testjava(interfaces)
                write "\t\t\tif({test} && x>=0) \{"
-               if check then write "\t\t\t\tx -= 2"
-               write "\t\t\t\} else \{ x--; a = b;\}"
+               if check then write "\t\t\t\tx = x + 1;"
+               #write "\t\t\t\} else \{ x = x - 1 + i - j; a = b;\}"
+               write "\t\t\t\} else \{ x = x - 1; a = b;\}"
                write "\t\t}"
                write "\t\}"
                write "\tSystem.out.println(x);"
@@ -232,7 +233,7 @@ class Generator
                if not dry then test = testcsharp(interfaces)
                write "\t\t\tif({test} && x>=0) \{"
                if check then write "\t\t\t\tx++;"
-               write "\} else \{ x--; a = b; \};"
+               write "\} else \{ x = x - 1 + i - j; a = b; \};"
                write "\t\t}"
                write "\t\}"
                write "\tSystem.Console.WriteLine(x);"
@@ -295,7 +296,8 @@ class Generator
                var test = "true"
                if not dry then test = testscala(interfaces)
                write "\t\tif ({test} && x>=0) \{"
-               if check then write "\t\t\tx += 1"
+               if check then write "\t\t\tx += 1;"
+               #write "\} else \{ x = x - 1 + i - j; a = b; \}"
                write "\} else \{ x = x - 1; a = b; \}"
                write "\t\tj += 1"
                write "\t\t\}"
@@ -339,8 +341,8 @@ class Generator
                var test = "true"
                if not dry then test = testcpp
                write "\t\tif({test} && x>=0) \{"
-               if check then write "\t\t\tx += 1"
-               write "\} else \{ x--; a = b;\}"
+               if check then write "\t\t\tx += 1;"
+               write "\} else \{ x = x - 1 + i - j; a = b;\}"
                write "\t\t}"
                write "\t\}"
                write "\tstd::cout << x << std::endl;"
@@ -442,7 +444,7 @@ class Generator
                if not dry then test = teste(se)
                write "\t\t\t\t\tif {test} and then x >= 0 then" 
                if check then write "\t\t\t\t\tx := x + 1"
-               write "\t\t\t\t\telse x := x - 1; a := b end"
+               write "\t\t\t\t\telse x := x - 1 + i - j; a := b end"
                write "\t\t\t\t\tj := j + 1"
                write "\t\t\t\tend"
                write "\t\t\t\ti := i + 1"
diff --git a/benchmarks/languages/bench_typetest_covar.nit b/benchmarks/languages/bench_typetest_covar.nit
new file mode 100644 (file)
index 0000000..d0bb2b8
--- /dev/null
@@ -0,0 +1,97 @@
+#!/usr/bin/env nit
+
+import bench_base
+
+class TypeTestCovarGenerator
+       super Generator
+
+       redef fun initnit(res)
+       do
+               for c in classes do
+                       res.add "new {classes.first}[{c}[Root]]"
+               end
+
+       end
+
+       redef fun testnit
+       do
+               return "a isa {classes.first}[{classes[middle]}[Root]]"
+       end
+
+       redef fun initjava(res, interfaces)
+       do
+
+               var tagc = ""
+               if interfaces then tagc = "X"
+               for c in classes do
+                       res.add "new {tagc}{classes.first}<{c}<Root>>()"
+               end
+       end
+
+       redef fun testjava(interfaces)
+       do
+               return "a instanceof {classes.first}"
+       end
+
+       redef fun initcsharp(res, interfaces)
+       do
+               var tagc = ""
+               if interfaces then tagc = "X"
+               for c in classes do
+                       res.add "new {tagc}{classes.first}<{c}<Root>>()"
+               end
+       end
+
+       redef fun testcsharp(interfaces)
+       do
+               return "a is {classes.first}<{classes[middle]}<Root>>"
+       end
+
+       redef fun initscala(res, interfaces)
+       do
+               var tagc = ""
+               if interfaces then tagc = "X"
+               for c in classes do
+                       res.add "new {tagc}{classes.first}[{c}[Root]]()"
+               end
+       end
+
+       redef fun testscala(interfaces)
+       do
+               return "a.isInstanceOf[{classes.first}[{classes[middle]}[Root]]]"
+       end
+
+       redef fun initcpp(res)
+       do
+               for c in classes do
+                       res.add "new {classes.first}<{c}<Root>*>()"
+               end
+       end
+
+       redef fun testcpp
+       do
+               write "\t\t\t{classes.first}<{classes[middle]}<Root>*> *to = dynamic_cast<{classes.first}<{classes[middle]}<Root>*>*>(a);"
+               return "to != 0"
+       end
+
+       redef fun inite(res, se)
+       do
+               for c in classes do
+                       res.add "create \{{classes.first}[{c}[ROOT]]\} a"
+               end
+       end
+
+       redef fun teste(se)
+       do
+               write "\t\t\t\t\tto ?= a"
+               return "to /= Void"
+       end
+
+       redef fun locale(se)
+       do
+               write "\t\t\tto: {classes.first}[{classes[middle]}[ROOT]]"
+       end
+end
+
+var g = new TypeTestCovarGenerator
+g.genall
diff --git a/benchmarks/languages/bench_typetest_depth_not.nit b/benchmarks/languages/bench_typetest_depth_not.nit
new file mode 100644 (file)
index 0000000..633e52e
--- /dev/null
@@ -0,0 +1,103 @@
+#!/usr/bin/env nit
+
+import bench_base
+import pipeline
+
+class TypeTestDepthNotGenerator
+       super Generator
+
+       redef fun initnit(res)
+       do
+               res.add "new {classes.last}[Root]"
+               for c in classes.skip_tail(1) do
+                       res.add "new {c}[Root]"
+               end
+       end
+
+       redef fun testnit
+       do
+               return "not a isa {classes.last}[Root]"
+       end
+
+       redef fun initjava(res, interfaces)
+       do
+
+               var tagc = ""
+               if interfaces then tagc = "X"
+               res.add "new {tagc}{classes.last}<Root>()"
+               for c in classes.skip_tail(1) do
+                       res.add "new {tagc}{c}<Root>()"
+               end
+       end
+
+       redef fun testjava(interfaces)
+       do
+               return "!(a instanceof {classes.last})"
+       end
+
+       redef fun initcsharp(res, interfaces)
+       do
+               var tagc = ""
+               if interfaces then tagc = "X"
+               res.add "new {tagc}{classes.last}<Root>()"
+               for c in classes.skip_tail(1) do
+                       res.add "new {tagc}{c}<Root>()"
+               end
+       end
+
+       redef fun testcsharp(interfaces)
+       do
+               return "!(a is {classes.last}<Root>)"
+       end
+
+       redef fun initscala(res, interfaces)
+       do
+               var tagc = ""
+               if interfaces then tagc = "X"
+               res.add "new {tagc}{classes.last}[Root]()"
+               for c in classes.skip_tail(1) do
+                       res.add "new {tagc}{c}[Root]()"
+               end
+       end
+
+       redef fun testscala(interfaces)
+       do
+               return "!a.isInstanceOf[{classes.last}[Root]]"
+       end
+
+       redef fun initcpp(res)
+       do
+               res.add "new {classes.last}<Root>()"
+               for c in classes.skip_tail(1) do
+                       res.add "new {c}<Root>()"
+               end
+       end
+
+       redef fun testcpp
+       do
+               write "\t\t\t{classes.last}<Root> *to = dynamic_cast<{classes.last}<Root>*>(a);"
+               return "to == 0"
+       end
+
+       redef fun inite(res, se)
+       do
+               res.add "create \{{classes.last}[ROOT]\} a"
+               for c in classes.skip_tail(1) do
+                       res.add "create \{{c}[ROOT]\} a"
+               end
+       end
+
+       redef fun teste(se)
+       do
+               write "\t\t\t\t\tto ?= a"
+               return "to = Void"
+       end
+
+       redef fun locale(se)
+       do
+               write "\t\t\tto: {classes.last}[ROOT]"
+       end
+end
+
+var g = new TypeTestDepthNotGenerator
+g.genall
diff --git a/benchmarks/languages/bench_typetest_fts_nesting.nit b/benchmarks/languages/bench_typetest_fts_nesting.nit
new file mode 100644 (file)
index 0000000..8cb2df0
--- /dev/null
@@ -0,0 +1,133 @@
+#!/usr/bin/env nit
+
+import bench_base
+
+class TypeTestFtsNestingGenerator
+       super Generator
+
+       fun clanit(i: Int): String
+       do
+               var s = new Buffer
+               s.append("{classes.first}[" * i)
+               s.append("Root")
+               s.append("]" * i)
+               return s.to_s
+       end
+
+       redef fun initnit(res)
+       do
+               for i in [1..dept] do
+                       res.add "new {clanit(i)}"
+               end
+
+       end
+
+       redef fun testnit
+       do
+               return "a isa {clanit(middle)}"
+       end
+
+       fun clajava(i: Int): String
+       do
+               var s = new Buffer
+               s.append("{classes.first}<" * i)
+               s.append("Root")
+               s.append(">" * i)
+               return s.to_s
+       end
+
+       redef fun initjava(res, interfaces)
+       do
+
+               var tagc = ""
+               if interfaces then tagc = "X"
+               for i in [1..dept] do
+                       res.add "new {tagc}{clajava(i)}()"
+               end
+       end
+
+       redef fun testjava(interfaces)
+       do
+               return "a instanceof {classes.first}<?>"
+       end
+
+       redef fun initcsharp(res, interfaces)
+       do
+               var tagc = ""
+               if interfaces then tagc = "X"
+               for i in [1..dept] do
+                       res.add "new {tagc}{clajava(i)}()"
+               end
+       end
+
+       redef fun testcsharp(interfaces)
+       do
+               return "a is {clajava(middle)}"
+       end
+
+       redef fun initscala(res, interfaces)
+       do
+               var tagc = ""
+               if interfaces then tagc = "X"
+               for i in [1..dept] do
+                       res.add "new {tagc}{clanit(i)}()"
+               end
+       end
+
+       redef fun testscala(interfaces)
+       do
+               return "a.isInstanceOf[{clanit(middle)}]"
+       end
+
+       fun clacpp(i: Int): String
+       do
+               var s = new Buffer
+               s.append("{classes.first}<" * i)
+               s.append("Root")
+               s.append("*>" * i)
+               return s.to_s
+       end
+
+       redef fun initcpp(res)
+       do
+               for i in [1..dept] do
+                       res.add "new {clacpp(i)}()"
+               end
+       end
+
+       redef fun testcpp
+       do
+               write "\t\t\t{clacpp(middle)} *to = dynamic_cast<{clacpp(middle)}*>(a);"
+               return "to != 0"
+       end
+
+       fun clae(i: Int): String
+       do
+               var s = new Buffer
+               s.append("{classes.first}[" * i)
+               s.append("ROOT")
+               s.append("]" * i)
+               return s.to_s
+       end
+
+       redef fun inite(res, se)
+       do
+               for i in [1..dept] do
+                       res.add "create \{{clae(i)}\} a"
+               end
+       end
+
+       redef fun teste(se)
+       do
+               write "\t\t\t\t\tto ?= a"
+               return "to /= Void"
+       end
+
+       redef fun locale(se)
+       do
+               write "\t\t\tto: {clae(middle)}"
+       end
+end
+
+var g = new TypeTestFtsNestingGenerator
+g.genall