package jmathlibtests.core.interpreter; import jmathlib.tools.junit.framework.*; import jmathlib.core.interpreter.*; import jmathlibtests.*; public class testParser extends TestCase { protected Interpreter ml; public testParser(String name) { super(name); } public static void main (String[] args) { jmathlib.tools.junit.textui.TestRunner.run (suite()); } protected void setUp() { ml = new Interpreter(true); } protected void tearDown() { ml = null; } public static Test suite() { return new TestSuite(testParser.class); } /************* simple expressions ****************************************/ public void testAdd01() { ml.executeExpression("a=1+1;"); assertEquals(2.0, ml.getScalarValueRe("a"), 0.001); } public void testAdd02() { ml.executeExpression("a=3.45+2.234;"); assertEquals(5.684, ml.getScalarValueRe("a"), 0.001); } public void testAdd03() { ml.executeExpression("ones(4)"); assertTrue(true); } public void testAdd04() { ml.executeExpression("ones(4)"); assertTrue(true); } /************* priorities ************************************************/ public void testPriority01() { ml.executeExpression("a=2+3*4"); assertEquals(14.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority02() { ml.executeExpression("a=2*3+4"); assertEquals(10.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority03() { ml.executeExpression("a=1/2-1+9"); assertEquals(8.5, ml.getScalarValueRe("a"), 0.001); } public void testPriority04() { ml.executeExpression("a=1+2*3+4*2"); assertEquals(15.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority05() { ml.executeExpression("a=1+2*3*4+5"); assertEquals(30.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority06() { ml.executeExpression("a=1+2*3+4*5+6"); assertEquals(33.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority07() { ml.executeExpression("a=ones((2)-1)"); assertEquals(1.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority08() { ml.executeExpression("{a=11;}b=22;"); assertEquals(11.0, ml.getScalarValueRe("a"), 0.001); assertEquals(22.0, ml.getScalarValueRe("b"), 0.001); } public void testPriority09() { ml.executeExpression("a=33;{b=44;}c=55;"); assertEquals(33.0, ml.getScalarValueRe("a"), 0.001); assertEquals(44.0, ml.getScalarValueRe("b"), 0.001); assertEquals(55.0, ml.getScalarValueRe("c"), 0.001); } public void testPriority10() { ml.executeExpression("a=66,{b=77,};c=88,"); assertEquals(66.0, ml.getScalarValueRe("a"), 0.001); assertEquals(77.0, ml.getScalarValueRe("b"), 0.001); assertEquals(88.0, ml.getScalarValueRe("c"), 0.001); } public void testPriority11() { ml.executeExpression("a=2*(3+4)"); assertEquals(14.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority12() { ml.executeExpression("a=(2+4)*3"); assertEquals(18.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority13() { ml.executeExpression("a=(1+2)*(3+4)"); assertEquals(21.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority14() { ml.executeExpression("a=(1+3)^2"); assertEquals(16.0, Math.abs(ml.getScalarValueRe("a")), 0.001); } public void testPriority14b() { ml.executeExpression("a=(1+3).^2"); assertEquals(16.0, Math.abs(ml.getScalarValueRe("a")), 0.001); } public void testPriority15() { ml.executeExpression("a=2^(1+3)"); assertEquals(16.0, Math.abs(ml.getScalarValueRe("a")), 0.001); } public void testPriority16() { ml.executeExpression("a=2-3+5"); assertEquals(4.0, ml.getScalarValueRe("a"), 0.001); } public void testPriority100() { ml.executeExpression("2+3*4"); assertEquals(14.0, ml.getScalarValueRe("ans"), 0.001); } public void testPriority101() { ml.executeExpression("2<3"); assertEquals(true, ml.getScalarValueBoolean("ans")); } public void testPriority102() { ml.executeExpression("2<3+4"); assertEquals(true, ml.getScalarValueBoolean("ans")); } public void testPriority103() { ml.executeExpression("2>3+4"); assertEquals(false, ml.getScalarValueBoolean("ans")); } public void testPriority104() { ml.executeExpression("2>3||1<7"); assertEquals(true, ml.getScalarValueBoolean("ans")); } public void testPriority105() { ml.executeExpression("2>3||1>7"); assertEquals(false, ml.getScalarValueBoolean("ans")); } public void testPriority106() { ml.executeExpression("2<3||1>7"); assertEquals(true, ml.getScalarValueBoolean("ans")); } public void testPriority107a() { ml.executeExpression("3&&2==3||1>7"); assertEquals(false, ml.getScalarValueBoolean("ans")); } public void testPriority107b() { ml.executeExpression("3&&2==2||1>7"); assertEquals(true, ml.getScalarValueBoolean("ans")); } public void testPriority108() { ml.executeExpression("5!=5||1>7"); assertEquals(false, ml.getScalarValueBoolean("ans")); } public void testPriority109() { ml.executeExpression("7!=5||1>7"); assertEquals(true, ml.getScalarValueBoolean("ans")); } public void testPriority110() { ml.executeExpression("8>=7||4!=5"); assertEquals(true, ml.getScalarValueBoolean("ans")); } public void testPriority111() { ml.executeExpression("5>=7||5!=5"); assertEquals(false, ml.getScalarValueBoolean("ans")); } /************* whitespace sensitivity ************************************/ /** are whitespaces treated differently ? */ public void testWhitespace01() { ml.executeExpression(" a = 2 + 3 "); assertEquals(5.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace02() { ml.executeExpression("a = 2 +4"); assertEquals(6.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace03() { ml.executeExpression("a = 2+ 5"); assertEquals(7.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace04() { ml.executeExpression("a =2 + 6"); assertEquals(8.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace05() { ml.executeExpression("a= 2 + 7"); assertEquals(9.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace06() { ml.executeExpression("a= 2 +3"); assertEquals(5.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace07() { ml.executeExpression("a= 3+ 3"); assertEquals(6.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace08() { ml.executeExpression("a= 4+3"); assertEquals(7.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace09() { ml.executeExpression("a=5+3"); assertEquals(8.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace10() { ml.executeExpression(" a = 6 + 3"); assertEquals(9.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace11() { ml.executeExpression(" a = min (2,3)"); assertEquals(2.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace12() { ml.executeExpression(" a = min ( 4 , 3 ) "); assertEquals(3.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace13() { ml.executeExpression(" a = min ( max(-1 , 2) , 3 ) "); assertEquals(2.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace14() { ml.executeExpression(" a = max (min(1-2, 4) , 2 ) "); assertEquals(2.0, ml.getScalarValueRe("a"), 0.001); } public void testWhitespace15() { ml.executeExpression(" a = min ( 4 , 3 ) + 5 "); assertEquals(8.0, ml.getScalarValueRe("a"), 0.001); } /************* assignments ****************************************/ public void testAssign01() { ml.executeExpression("a=1;"); assertEquals(1.0, ml.getScalarValueRe("a"), 0.001); } public void testAssign02() { ml.executeExpression("a=2;"); assertEquals(2.0, ml.getScalarValueRe("a"), 0.001); } public void testAssign04() { ml.executeExpression("a=123;b=456;"); assertEquals(123.0, ml.getScalarValueRe("a"), 0.001); assertEquals(456.0, ml.getScalarValueRe("b"), 0.001); } /************* sign ****************************************/ public void testSign01a() { ml.executeExpression("a=2;"); ml.executeExpression("b=-a;"); assertEquals(-2.0, ml.getScalarValueRe("b"), 0.001); } public void testSign01b() { ml.executeExpression("a=2;"); ml.executeExpression("b=+a;"); assertEquals(2.0, ml.getScalarValueRe("b"), 0.001); } public void testSign01c() { ml.executeExpression("a=+2;"); ml.executeExpression("b=-a;"); assertEquals(-2.0, ml.getScalarValueRe("b"), 0.001); } public void testSign01d() { ml.executeExpression("a=-22;"); ml.executeExpression("b=-a;"); assertEquals(22.0, ml.getScalarValueRe("b"), 0.001); } public void testSign02() { ml.executeExpression("a=2;"); ml.executeExpression("b=(7)-a;"); assertEquals(5.0, ml.getScalarValueRe("b"), 0.001); } public void testSign03() { ml.executeExpression("a=2;"); ml.executeExpression("b=(-a)+5;"); assertEquals(3.0, ml.getScalarValueRe("b"), 0.001); } public void testSign04() { ml.executeExpression("a=(-6);"); assertEquals(-6.0, ml.getScalarValueRe("a"), 0.001); } public void testSign05() { ml.executeExpression("a=(3)-8;"); assertEquals(-5.0, ml.getScalarValueRe("a"), 0.001); } public void testSign06() { ml.executeExpression("a=(+2)-3;"); assertEquals(-1.0, ml.getScalarValueRe("a"), 0.001); } public void testPlusPlus01() { ml.executeExpression("a=5;"); ml.executeExpression("a++;"); assertEquals(6.0, ml.getScalarValueRe("a"), 0.001); } public void testPlusPlus02() { ml.executeExpression("58++;"); assertEquals(59.0, ml.getScalarValueRe("ans"), 0.001); } public void testMinusMinus01() { ml.executeExpression("a=5;"); ml.executeExpression("a--;"); assertEquals(4.0, ml.getScalarValueRe("a"), 0.001); } public void testMinusMinus02() { ml.executeExpression("58--;"); assertEquals(57.0, ml.getScalarValueRe("ans"), 0.001); } public void testPlusAssign01() { ml.executeExpression("a=5;"); ml.executeExpression("a+=3;"); assertEquals(8.0, ml.getScalarValueRe("a"), 0.001); } public void testPlusAssign02() { ml.executeExpression("a=23;"); ml.executeExpression("a+=8;"); assertEquals(31.0, ml.getScalarValueRe("a"), 0.001); } public void testMinusAssign01() { ml.executeExpression("a=55;"); ml.executeExpression("a-=3;"); assertEquals(52.0, ml.getScalarValueRe("a"), 0.001); } public void testMinusAssign02() { ml.executeExpression("a=40;"); ml.executeExpression("a-=8;"); assertEquals(32.0, ml.getScalarValueRe("a"), 0.001); } public void testMulAssign01() { ml.executeExpression("a=5;"); ml.executeExpression("a*=3;"); assertEquals(15.0, ml.getScalarValueRe("a"), 0.001); } public void testMulAssign02() { ml.executeExpression("a=40;"); ml.executeExpression("a*=2;"); assertEquals(80.0, ml.getScalarValueRe("a"), 0.001); } public void testDivAssign01() { ml.executeExpression("a=9;"); ml.executeExpression("a/=3;"); assertEquals(3.0, ml.getScalarValueRe("a"), 0.001); } public void testDivAssign02() { ml.executeExpression("a=40;"); ml.executeExpression("a/=2;"); assertEquals(20.0, ml.getScalarValueRe("a"), 0.001); } /************* matrix ****************************************/ public void testMatrix01() { double[][] dr = {{1.0, 2.0, 1.0},{3.0, 4.0, 5.0}}; ml.executeExpression("d=[1,2,1\n3,4,5]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("d"))); } public void testMatrix02() { double[][] dr = {{1.0, 2.0, 3.0},{3.0, 4.0, 5.0}}; ml.executeExpression("d=[1 2 3\n3,4,5]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("d"))); } public void testMatrix03() { double[][] dr = {{1.0, 4.0, 3.0},{3.0, 4.0, 5.0}}; ml.executeExpression("a=4"); ml.executeExpression("d=[1 a 3\n3,4,5]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("d"))); } public void testMatrix04() { double[][] dr = {{1.0, 2.0, 3.0, 4.0}}; ml.executeExpression("d=[1 2 3 ,4]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("d"))); } public void testMatrix05() { double[][] dr = {{1.0, -5.0, 3.0},{3.0, 4.0, 5.0}}; ml.executeExpression("d=[1 2-7 3\n3,4,5]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("d"))); } public void testMatrix06() { double[][] dr = {{2.0, -5.0, 11.0},{3.0, 4.0, 11.0}}; ml.executeExpression("a=2;b=3;c=11;"); ml.executeExpression("d=[a 2-7 c\n b,4,c]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("d"))); } public void testMatrix07() { double[][] dr = {{1.0, 5.0, 3.0, 4.0}}; ml.executeExpression("d=[1 min(5, 6 ) 3 ,4]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("d"))); } public void testMatrix08() { // there has been a bug when parsing " ]" the trailing "]" has not been recognized double[][] dr = {{5.0, 6.0, 4.0}}; ml.executeExpression("dd=[5,6,4 ]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("dd"))); } public void testMatrix09() { // there has been a bug when parsing " ]" the trailing "]" has not been recognized double[][] dr = {{2.0, 6.0, 8.0}}; ml.executeExpression("[2, 6,8 ]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("ans"))); } public void testMatrix10() { // there has been a bug when parsing " ]" the trailing "]" has not been recognized double[][] dr = {{1.0, 6.0, 8.0}}; ml.executeExpression(" [ 1,6 ,8 ]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("ans"))); } public void testMatrix11() { // there has been a bug when parsing " ]" the trailing "]" has not been recognized double[][] dr = {{5.0, 6.0, 7.0}}; ml.executeExpression("[ 5, 6 , 7 ] "); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("ans"))); } public void testMatrix12() { // there has been a bug when parsing " ]" the trailing "]" has not been recognized double[][] dr = {{5.0, 6.0, 9.0}}; ml.executeExpression("[5, 6 9 ]"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("ans"))); } // bugfix for: sin(1-1)' had been throwing an error public void testUnaryOperator01() { ml.executeExpression("a=sin(1-1)';"); assertEquals(0.0, ml.getScalarValueRe("a"), 0.001); } public void testUnaryOperator02() { double[][] dr = {{5.0, 6.0, 9.0}}; ml.executeExpression("a=[5;6;9]'"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("a"))); } public void testUnaryOperator03() { // testcase for bug: a=[m]' threw an error double[][] dr = {{5.0},{ 3.0}}; ml.executeExpression("m=3"); ml.executeExpression("a=[5,m]'"); assertTrue(Compare.ArrayEquals(dr, ml.getArrayValueRe("a"))); } /************** funtions ***********/ public void testFunctionParameters01() { ml.throwErrorsB=true; try { ml.executeExpression("m=ceil(45) "); } catch (Exception e) { assertTrue(false); return; } assertTrue(true); } public void testFunctionParameters02() { // BUG1523328: ceil(4;5] did not throw an error, neither // did ceil(4;5) ml.throwErrorsB=true; try { ml.executeExpression("m=ceil(4;5) "); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testFunctionParameters03() { ml.executeExpression("a=ceil(4.5);"); assertEquals(5.0, ml.getScalarValueRe("a"), 0.001); } public void testOperatorParsing01() { ml.throwErrorsB=true; try { ml.executeExpression("m=+-44 "); } catch (Exception e) { assertTrue(false); return; } assertEquals(-44.0, ml.getScalarValueRe("m"), 0.001); } public void testOperatorParsing02() { ml.throwErrorsB=true; try { ml.executeExpression("m=*4 "); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing03() { ml.throwErrorsB=true; try { ml.executeExpression("m=3-*4 "); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing04() { ml.throwErrorsB=true; try { ml.executeExpression("m=*4 "); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing05a() { ml.throwErrorsB=true; try { ml.executeExpression("A=4;B=/4; "); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing05b() { ml.throwErrorsB=true; try { ml.executeExpression("+/4; "); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing05c() { ml.throwErrorsB=true; try { ml.executeExpression("*/4; "); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing06a() { ml.throwErrorsB=true; try { ml.executeExpression("m=-+-++4; "); } catch (Exception e) { assertTrue(false); return; } assertEquals(4.0, ml.getScalarValueRe("m"), 0.001); } public void testOperatorParsing06b() { ml.throwErrorsB=true; try { ml.executeExpression("m=-+++46; "); } catch (Exception e) { assertTrue(false); return; } assertEquals(-46.0, ml.getScalarValueRe("m"), 0.001); } public void testOperatorParsing06c() { ml.throwErrorsB=true; try { ml.executeExpression("b=99;m=---b; "); } catch (Exception e) { assertTrue(false); return; } assertEquals(-99.0, ml.getScalarValueRe("m"), 0.001); } // =^7 +^3 -^6 *^5 ^^5 !^7 public void testOperatorParsing07() { ml.throwErrorsB=true; try { ml.executeExpression("a=^7"); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing08() { ml.throwErrorsB=true; try { ml.executeExpression("+^8"); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing09() { ml.throwErrorsB=true; try { ml.executeExpression("-^7"); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing10() { ml.throwErrorsB=true; try { ml.executeExpression("*^7"); ml.executeExpression("/^7"); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } public void testOperatorParsing11() { ml.throwErrorsB=true; try { ml.executeExpression("^^7"); } catch (Exception e) { assertTrue(true); return; } assertTrue(false); } // -(--+++-3-5) public void testOperatorParsing06d() { ml.throwErrorsB=true; try { ml.executeExpression("-(--+++-+3-5); "); } catch (Exception e) { assertTrue(false); return; } assertEquals(8.0, ml.getScalarValueRe("ans"), 0.001); } /*************************************************/ }