1 // Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
3 package edu.berkeley.sbp.misc;
6 import java.lang.reflect.*;
7 import edu.berkeley.sbp.*;
8 import edu.berkeley.sbp.meta.*;
9 import edu.berkeley.sbp.chr.*;
10 import edu.berkeley.sbp.util.*;
12 public class RegressionTests {
14 public static boolean yes = false;
15 public static boolean graph = false;
16 public static File[] includes = new File[] { new File("tests") };
18 public static void main() throws Exception {
19 main(new String[] { "tests/meta.g", "tests/testcase.g", "tests/regression.tc" });
22 public static void main(String[] s) throws Exception {
24 boolean profile = false;
25 if (s[0].equals("-graph")) {
27 String[] s2 = new String[s.length-1];
28 System.arraycopy(s, 1, s2, 0, s2.length);
31 if (s[0].equals("-profile")) {
33 String[] s2 = new String[s.length-1];
34 System.arraycopy(s, 1, s2, 0, s2.length);
38 System.err.println("parsing " + s[0]);
39 Tree<String> res = new CharParser(MetaGrammar.newInstance()).parse(new FileInputStream(s[0])).expand1();
40 Union meta = GrammarBuilder.buildFromAST(res, "s", includes);
42 System.err.println("parsing " + s[1]);
43 res = new CharParser(meta).parse(new FileInputStream(s[1])).expand1();
45 Union testcasegrammar = GrammarBuilder.buildFromAST(res, "s", includes);
46 if (testcasegrammar==null) return;
47 CharParser parser = new CharParser(testcasegrammar);
50 System.out.println("\nready...");
54 long now = System.currentTimeMillis();
55 System.err.println("parsing " + s[2]);
56 Forest<String> r2 = parser.parse(new FileInputStream(s[2]));
58 System.out.println("elapsed = " + (System.currentTimeMillis()-now) + "ms");
60 System.out.println("\ndone");
64 System.err.println("expanding...");
66 TestCase[] expanded = (TestCase[])new GrammarBuilder(includes, "").walkChildren(r2.expand1());
67 for(TestCase tc : expanded)
70 } catch (Throwable t) {
71 System.err.println("\n\nexception thrown, class == " + t.getClass().getName());
72 System.err.println(t);
79 public static class TestCase {
80 private final boolean tib;
81 private final boolean jav;
82 public /*final*/ String input;
83 public final String[] output;
84 public final Union grammar;
85 public final String name;
87 public TestCase(String name, String input, String[] output,
88 Union grammar, boolean tib, boolean jav) {
93 this.output = output==null ? new String[0] : output;
94 this.grammar = grammar;
96 public String toString() {
97 String ret = "testcase {\n" + " input \""+input+"\";\n";
98 for(String s : output) ret += " output \""+s+"\";\n";
99 ret += grammar +"\n}\n";
102 public boolean execute() throws Exception {
103 Forest<String> res = null;
104 ParseFailed pfe = null;
105 CharParser parser = new CharParser(grammar);
106 System.out.print(" "+name+"\r");
107 //parser.helpgc = false;
110 ? /*new CharParser(grammar).parse(new Tib(input))*/ null
111 : parser.parse(new StringReader(input));
112 } catch (ParseFailed pf) {
115 //ystem.out.println("res=="+res);
118 FileOutputStream fos = new FileOutputStream("out.dot");
119 PrintWriter p = new PrintWriter(new OutputStreamWriter(fos));
120 GraphViz gv = new GraphViz();
125 System.out.println(parser);
128 Iterable<Tree<String>> results =
129 res==null ? new HashSet<Tree<String>>() : res.expand();
131 System.out.print("\r");
132 if (results == null || (!results.iterator().hasNext() && (output!=null && output.length > 0))) {
133 System.out.print("\033[31m");
134 System.out.print("FAIL ");
135 System.out.println("\033[0m "+name);
136 if (pfe != null) pfe.printStackTrace();
138 System.out.print("\r \r");
140 HashSet<String> outs = new HashSet<String>();
141 if (output != null) for(String s : output) outs.add(s.trim());
143 for (Tree<String> r : results) {
144 String s = r.toString().trim();
145 if (outs.contains(s)) { outs.remove(s); continue; }
146 if (!bad) System.out.println(input);
147 System.out.print("\033[33m");
148 System.out.println(" GOT: " + s);
151 for(String s : outs) {
152 if (!bad) System.out.println(input);
153 System.out.print("\033[31m");
154 System.out.println("EXPECTED: " + s);
158 System.out.println("\033[0m");
161 System.out.println("\r\033[32mPASS\033[0m "+name);
167 private static String pad(int i,String s) { return s.length() >= i ? s : pad(i-1,s)+" "; }
168 public static String string(Tree<String> tree) {
170 if (tree.head()!=null) ret += tree.head();
171 ret += string(tree.children());
174 public static String string(Iterable<Tree<String>> children) {
176 for(Tree<String> t : children) ret += string(t);