From 8635bc2dbf00957163181078db7c59aa7686e61e Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Mon, 18 Feb 2013 12:32:29 -0500 Subject: [PATCH] benches: added C# to gen micro benches Signed-off-by: Alexandre Terrasa --- src/benchs/gen.nit | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/run_bench.sh | 6 +++ 2 files changed, 110 insertions(+) diff --git a/src/benchs/gen.nit b/src/benchs/gen.nit index 74c4b43..9dc2d32 100644 --- a/src/benchs/gen.nit +++ b/src/benchs/gen.nit @@ -235,6 +235,109 @@ class Generator file.close end + fun writecsharp(name: String, interfaces: Bool) + do + var cl = "" + if interfaces then cl = "X" + file = new OFStream.open("{name}.cs") + write "class {name} \{" + if interfaces then + write "interface Root\n\t\{ int Id(); \}" + else + write "class Root\n\t\{ public int Id() \{ return 0;\} \}" + end + for c in classes do + if interfaces then + write "interface {c} " + else + write "class {c} " + end + if c.supers.is_empty then + write "\t: Root" + else for s in [c.supers.first] do + write "\t: {s}" + end + if interfaces then + write "\{\}" + write "class X{c} : {c}" + end + write "\{" + write "\tpublic int Id() \{ return {c.id}; \}" + write "\}" + end + write "class L" + if interfaces then + write ": Root \{" + else + write ": Root \{" + end + write "\tE _item;" + write "\tpublic E Item() \{ return _item; \}" + write "\tpublic void SetItem(E i) \{ _item = i; \}" + write "\tL _next;" + write "\tpublic L Next() \{ return _next; \}" + write "\tpublic void SetNext(L n) \{ _next = n; \}" + write "\tpublic L(E i, L n) \{ SetItem(i); SetNext(n); \}" + write "\tpublic int Id() \{ return -1; \}" + write "\}" + + write "static L Fill() \{" + write "\tL head = null;" + for c in classes do + write "\tL<{c}> l{c} = new L<{c}>(new {cl}{c}(), null);" + write "\thead = new L(l{c}, head);" + end + write "\thead = null;" + write "for (int x=0; x<{arraylen}; x++) \{" + for i in [0..listlen[ do + var c = unlist[i] + write "\tL<{c}> l{i} = new L<{c}>(new {cl}{c}(), null);" + write "\thead = new L(l{i}, head);" + end + write "\}" + write "return head;" + write "\}" + + write "static int Run(L head1, L head2) \{" + write "\tint cpt = 0;" + write "\tint y = {loops/list.length};" + write "\twhile (y > 0) \{;" + write "\tL n1 = head1;" + write "\tL n2 = head2;" + write "\twhile (n1 != null) \{" + for i in [0..listlen[ do + var c = list[i] + write "\t\tRoot l{i} = n1.Item();" + write "\t\tL<{c}> lc{i} = (L<{c}>)l{i};" + write "\t\t{c} c{i} = lc{i}.Item();" + write "\t\tn1 = n1.Next();" + if count then + write "\t\tif (c{i}.Id() == {c.id}) cpt += 1;" + end + write "\t\tRoot l2_{i} = n2.Item();" + write "\t\tL<{c}> lc2_{i} = (L<{c}>)l2_{i};" + write "\t\tlc2_{i}.SetItem(c{i});" + write "\t\tn2 = n2.Next();" + end + write "\t\}" + write "y -= 1;" + write "\}" + write "return cpt;" + write "\}" + + write "static void Main(string[] args) \{" + write "L head = Fill();" + write "int loops = 25;" + write "if (args.Length > 0) loops = int.Parse(args[0]);" + write "for (int x=0; x