--- /dev/null
+#!/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