new checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / RegressionTests.java
index 8d165ff..1fd97f1 100644 (file)
@@ -8,20 +8,6 @@ import edu.berkeley.sbp.tib.*;
 public class RegressionTests {
 
     public static boolean yes = false;
-    public static class MyWalker extends ReflectiveWalker {
-        public String top(Object[] o) { return "top("+join(o)+")"; }
-        public String str(String[] s) { String ret = ""; for(String st : s) ret += st; return ret; }
-        public String join(Object[] o) { String ret = ""; for(Object st : o) ret += st; return ret; }
-        public String whilex(Object s, Object y) { return "while("+s+") " + y; }
-        public String seq(Object[] statements) {
-            String ret = "";
-            for(Object s : statements) ret += s + ";\n";
-            return ret;
-        }
-        /*
-        public String bl(String s) { return "{" + s + "}"; }
-        */
-    };
 
     public static void main(String[] s) throws Exception {
         try {
@@ -96,7 +82,7 @@ public class RegressionTests {
                 System.out.println("PARSE FAILED");
                 System.out.print("\033[0m");
             } else {
-                System.out.println("\r                                                                                                              \r");
+                System.out.print("\r                                                                                                              \r");
             }
             HashSet<String> outs = new HashSet<String>();
             if (output != null) for(String s : output) outs.add(s.trim());
@@ -104,40 +90,44 @@ public class RegressionTests {
             for (Tree<String> r : results) {
                 String s = r.toString().trim();
                 if (outs.contains(s)) { outs.remove(s); continue; }
+                if (!bad) System.out.println(input);
                 System.out.print("\033[33m");
                 System.out.println("     GOT: " + s);
                 bad = true;
             }
             for(String s : outs) {
+                if (!bad) System.out.println(input);
                 System.out.print("\033[31m");
                 System.out.println("EXPECTED: " + s);
                 bad = true;
             }
             if (bad) {
-                System.out.print("\033[0m");
+                System.out.println("\033[0m");
                 return true;
             }             
-            System.out.println("\033[32mPASS\033[0m");
+            System.out.println("\r\033[32mPASS\033[0m                                                                              ");
             return false;
         }
     }
 
     public static class TestCaseBuilder extends MetaGrammar {
-        public TestCase[] ts(Object o1, TestCase[] ts, Object o2) { return ts; }
-        public TestCase[] ts(TestCase[] ts) { return ts; }
-        public TestCase testcase(String input, String[] output, Union grammar) throws IOException {
-            return new TestCase(input, output,        grammar, false); }
-        public TestCase testcase(String input,                  Union grammar) throws IOException {
-            return new TestCase(input, new String[0], grammar, false); }
-        public TestCase  tibcase(String input,                  Union grammar) throws IOException {
-            return new TestCase(input, new String[0], grammar, true); }
-        public MetaGrammar grammar(Object[] o) { return this; }
-        public Object walk(String tag, Object[] args) {
-            if ("grammar".equals(tag)) {
-                System.out.println("\n" + this + "\n");
-                return done("s");
+        public Object walk(Tree<String> tree) {
+            try {
+                if ("grammar".equals(tree.head())) { walkChildren(tree); return done("s"); }
+                else if ("output".equals(tree.head())) return string(tree.children());
+                else if ("input".equals(tree.head())) return string(tree.children());
+                else if ("tibcase".equals(tree.head()) || "testcase".equals(tree.head())) {
+                    String input = string(tree.child(0));
+                    String[] output = tree.numChildren()>2 ? ((String[])walk(tree, 1)) : new String[0];
+                    boolean tib = "tibcase".equals(tree.head());
+                    MetaGrammar gram = tib ? new Tib.Grammar() : new MetaGrammar();
+                    Union grammar = (Union)((MetaGrammar)(gram.walk(tree, tree.numChildren()-1))).done("s");
+                    return new TestCase(input, output, grammar, tib);
+                } else if ("ts".equals(tree.head())) return walk(tree, 0);
+                else return super.walk(tree);
+            } catch (Exception e) {
+                throw new Error(e);
             }
-            else return super.walk(tag, args);
         }
     }