package tests; import static org.junit.Assert.*; import java.io.Reader; import java.io.StringReader; import org.junit.Test; import parser.ASTarithmeticTerm; import parser.ParseException; import parser.SparcTranslator; import typechecking.TermEvaluator; public class TestEvaluator { @Test public void testExpressions() { assertTrue("1+1!=2",evaluate("1+1")==2); assertTrue("3+5",evaluate("3+5")==8); assertTrue("(1)*10",evaluate("1*10")==10); assertTrue("((3+5)*10-1*5)*2+1!=151",evaluate("((3+5)*10-1*5)*2+1")==151); } @Test public void testNonEvaluable() { assertFalse("X is evaluable",isEvaluable("X")); assertTrue("1 is not evaluable",isEvaluable("1")); assertTrue("3 is evaluable",isEvaluable("3")); assertFalse("((3+5)*Y-1*5)*2+1 is evaluable",isEvaluable("((3+5)*Y-1*5)*2+1")); } private long evaluate(String test) { TermEvaluator te=CreateValuator(test); try { return te.evaluate(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0; } private boolean isEvaluable(String test) { TermEvaluator te=CreateValuator(test); return te.isEvaluable(); } private TermEvaluator CreateValuator(String s) { Reader sr= new StringReader(s); SparcTranslator p= new SparcTranslator(sr); try { ASTarithmeticTerm t=(ASTarithmeticTerm)p.arithmeticTerm(); TermEvaluator teval=new TermEvaluator(t); return teval; } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }