/** * Runs API regression tests. * * @return Number of tests with error result. */ public static int Start() { long start = mXparser.currentTimeMillis(); bool syn1, syn2, syn3, syn4, syn5, syn6, syn7, syn8, b1, b2, b3; String s1, s2; int i1, i2, n1, n2, n3, n4, n5, n6; Argument A1, A2, A3, A4, A5; Function F1, F2, F3, F4, F5; Constant C1, C2, C3, C4, C5; double d1, d2, d3; Constant c1 = new Constant("c1",1); Constant c2 = new Constant("c2",2); Constant c3 = new Constant("c3",3); //Constant c4 = new Constant("c4",4); Constant c5 = new Constant("c5",5); Constant c6 = new Constant("c6",6); Function f1 = new Function("f1","1","x"); Function f2 = new Function("f2","2","x"); Function f3 = new Function("f3","3","x"); Function f4 = new Function("f4","4","x"); //Function f5 = new Function("f5","5","x"); Function f6 = new Function("f6","6","x"); Function f7 = new Function("f7","7","x"); Argument a1 = new Argument("a1",1); Argument a2 = new Argument("a2",2); Argument a3 = new Argument("a3",3); Argument a4 = new Argument("a4",4); Argument a5 = new Argument("a5",5); Argument a6 = new Argument("a6",6); Argument a7 = new Argument("a7",7); //Argument a8 = new Argument("a8",8); bool[] test = new bool[100]; for (int i = 0; i < 100; i++) test[i] = false; Expression e; int testId = -1; /* * 0. public Expression() */ testId++; e = new Expression(); if ( e.getExpressionString().Equals("") && e.getArgumentsNumber() == 0 && e.getConstantsNumber() == 0 && e.getFunctionsNumber() == 0 ) test[testId] = true; /* * 1. */ testId++; e = new Expression("a1+c2", a1, a2, a3, a4, a5); if ( e.getExpressionString().Equals("a1+c2") && e.getArgumentsNumber() == 5 && e.getConstantsNumber() == 0 && e.getFunctionsNumber() == 0 ) test[testId] = true; /* * 2. */ testId++; e = new Expression("a1+c2", a1, f1, a2, f2, a3, a4, f3, a5, f4); if ( e.getExpressionString().Equals("a1+c2") && e.getArgumentsNumber() == 5 && e.getConstantsNumber() == 0 && e.getFunctionsNumber() == 4 ) test[testId] = true; /* * 3 */ testId++; e = new Expression("a1+c2", a1, a2, c1, c2, a3, a4, c5, a5, f1, f2, f3, f4); if ( e.getExpressionString().Equals("a1+c2") && e.getArgumentsNumber() == 5 && e.getConstantsNumber() == 3 && e.getFunctionsNumber() == 4 ) test[testId] = true; /* * 4. void setExpressionString(String expressionString), String getExpressionString(), void clearExpressionString() */ testId++; syn1 = e.checkSyntax(); e.setExpressionString("c2+a1"); syn2 = e.getSyntaxStatus(); syn3 = e.checkSyntax(); s1 = e.getExpressionString(); syn4 = e.getSyntaxStatus(); syn5 = e.checkSyntax(); e.clearExpressionString(); syn6 = e.getSyntaxStatus(); syn7 = e.checkSyntax(); s2 = e.getExpressionString(); syn8 = e.getSyntaxStatus(); if ( s1.Equals("c2+a1") && s2.Equals("") && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn3 == Expression.NO_SYNTAX_ERRORS && syn4 == Expression.NO_SYNTAX_ERRORS && syn5 == Expression.NO_SYNTAX_ERRORS && syn6 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn7 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn8 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN ) test[testId] = true; /* * 5. void setDescription(String description), String getDescription(), void clearDescription() */ testId++; e.setExpressionString("c1+a2"); syn1 = e.checkSyntax(); e.setDescription("opis"); s1 = e.getDescription(); e.clearDescription(); s2 = e.getDescription(); syn2 = e.getSyntaxStatus(); if ( s1.Equals("opis") && s2.Equals("") && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.NO_SYNTAX_ERRORS ) test[testId] = true; /* * 6. void setVerboseMode(), boolean getVerboseMode(), void setSilentMode() */ testId++; syn1 = e.checkSyntax(); b1 = e.getVerboseMode(); e.setVerboseMode(); b2 = e.getVerboseMode(); e.setSilentMode(); b3 = e.getVerboseMode(); syn2 = e.getSyntaxStatus(); if ( b1 == false && b2 == true && b3 == false && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.NO_SYNTAX_ERRORS ) test[testId] = true; /* * 7. * public boolean getRecursiveMode() */ Function fa = new Function("f(x,y)=sin(x)+cos(y)"); Function fb = new Function("f(x,y)=sin(x)+cos(y)+f(1,2)"); testId++; syn1=fa.checkSyntax(); syn2=fb.checkSyntax(); b1 = fa.getRecursiveMode(); b2 = fb.getRecursiveMode(); if ( b1 == false && b2 == true && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.NO_SYNTAX_ERRORS ) test[testId] = true; /* * 8. * Expression(String expressionString) */ testId++; e = new Expression("1+2"); if ( e.getExpressionString().Equals("1+2") && e.getArgumentsNumber() == 0 && e.getConstantsNumber() == 0 && e.getFunctionsNumber() == 0 ) test[testId] = true; /* * 9. * Expression(String expressionString) */ testId++; e = new Expression("1+2", a1, a2, a3); if ( e.getExpressionString().Equals("1+2") && e.getArgumentsNumber() == 3 && e.getConstantsNumber() == 0 && e.getFunctionsNumber() == 0 ) test[testId] = true; /* * 10. * void addArguments(Argument... arguments) * void addArguments( ArrayList<Argument> argumentsList) * defineArguments(String... argumentsNames) * defineArgument(String argumentName, double argumentValue) */ testId++; e = new Expression("1+2"); syn1 = e.checkSyntax(); e.addDefinitions(a6, a7); syn2 = e.getSyntaxStatus(); syn3 = e.checkSyntax(); e.addDefinitions(a1, a2, a3, a4, a5); syn4 = e.getSyntaxStatus(); syn5 = e.checkSyntax(); e.defineArguments("x1", "x2", "x3"); syn6 = e.getSyntaxStatus(); syn7 = e.checkSyntax(); e.defineArgument("x", 1); syn8 = e.getSyntaxStatus(); if ( e.getExpressionString().Equals("1+2") && e.getArgumentsNumber() == 11 && e.getConstantsNumber() == 0 && e.getFunctionsNumber() == 0 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn3 == Expression.NO_SYNTAX_ERRORS && syn4 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn5 == Expression.NO_SYNTAX_ERRORS && syn6 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn7 == Expression.NO_SYNTAX_ERRORS && syn8 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN ) test[testId] = true; /* * 11. * int getArgumentIndex(String argumentName) * Argument getArgument(String argumentName) * Argument getArgument(int argumentIndex) * int getArgumentsNumber() */ testId++; syn1 = e.checkSyntax(); i1 = e.getArgumentIndex("asdsa"); //-1 i2 = e.getArgumentIndex("x1"); //7 A1 = e.getArgument("asasas"); //null A2 = e.getArgument("a2"); //a2 A3 = e.getArgument(-1); //null A4 = e.getArgument(23);//null A5 = e.getArgument(1);//a7 n1 = e.getArgumentsNumber();//11 syn2 = e.getSyntaxStatus(); if ( i1 == -1 && i2 == 7 && A1 == null && A2 == a2 && A3 == null && A4 == null && A5 == a7 && n1 == 11 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.NO_SYNTAX_ERRORS ) test[testId] = true; /* * 12. * void setArgumentValue * double getArgumentValue */ testId++; syn1 = e.checkSyntax(); d1 = e.getArgumentValue("a1"); syn2 = e.getSyntaxStatus(); e.setArgumentValue("asds", 1); syn3 = e.getSyntaxStatus(); syn4 = e.checkSyntax(); e.setArgumentValue("a1", 10); syn4 = e.getSyntaxStatus(); d2 = e.getArgumentValue("asdfasdf"); d3 = e.getArgumentValue("a1"); syn5 = e.getSyntaxStatus(); if ( d1 == 1 && Double.IsNaN(d2) && d3 == 10 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.NO_SYNTAX_ERRORS && syn3 == Expression.NO_SYNTAX_ERRORS && syn4 == Expression.NO_SYNTAX_ERRORS && syn5 == Expression.NO_SYNTAX_ERRORS ) test[testId] = true; /* * 13. * void removeArguments(String... argumentsNames) * void removeArguments(Argument... arguments) * void removeAllArguments() */ testId++; e.setExpressionString("1+2"); syn1 = e.checkSyntax(); n1 = e.getArgumentsNumber(); e.removeArguments("asfdf"); syn2 = e.getSyntaxStatus(); n2 = e.getArgumentsNumber(); e.removeArguments("x1","x2"); n3 = e.getArgumentsNumber(); syn3 = e.checkSyntax(); e.removeArguments(a3); n4 = e.getArgumentsNumber(); e.removeArguments(a1,a2); syn4 = e.getSyntaxStatus(); n5 = e.getArgumentsNumber(); syn5 = e.checkSyntax(); e.removeAllArguments(); n6 = e.getArgumentsNumber(); syn6 = e.getSyntaxStatus(); if ( n2 == n1 && n2-n3 == 2 && n3-n4 == 1 && n4-n5 == 2 && n6 == 0 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn3 == Expression.NO_SYNTAX_ERRORS && syn4 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn5 == Expression.NO_SYNTAX_ERRORS && syn6 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN ) test[testId] = true; /* * 14. * void addConstants(Constant... constants) * void addConstants( ArrayList<Constant> constantsList) * void defineConstant(String constantName, double constantValue) */ testId++; e = new Expression("1+2", new Constant("a=5")); syn1 = e.checkSyntax(); e.addDefinitions(c5, c6); syn2 = e.getSyntaxStatus(); syn3 = e.checkSyntax(); e.addDefinitions(c1, c2, c3, c5, c6); syn4 = e.getSyntaxStatus(); syn5 = e.checkSyntax(); e.defineConstant("cx1",1); e.removeDefinitions(c5, c6); syn6 = e.checkSyntax(); e.removeDefinitions(c5, c6); if ( e.getExpressionString().Equals("1+2") && e.getArgumentsNumber() == 0 && e.getConstantsNumber() == 5 && e.getFunctionsNumber() == 0 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn3 == Expression.NO_SYNTAX_ERRORS && syn4 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn5 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn6 == Expression.NO_SYNTAX_ERRORS ) test[testId] = true; /* * 15. * int getConstantIndex(String constantName) * Constant getConstant(String constantName) * Constant getConstant(int constantIndex) * int getConstantsNumber() */ testId++; syn1 = e.checkSyntax(); i1 = e.getConstantIndex("asdsa"); //-1 i2 = e.getConstantIndex("c6"); //-1 C1 = e.getConstant("asasas"); //null C2 = e.getConstant("c1"); //c1 C3 = e.getConstant(-1); //null C4 = e.getConstant(23);//null C5 = e.getConstant(1);//c1 n1 = e.getConstantsNumber();//5 syn2 = e.getSyntaxStatus(); if ( i1 == -1 && i2 == -1 && C1 == null && C2 == c1 && C3 == null && C4 == null && C5 == c1 && n1 == 5 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.NO_SYNTAX_ERRORS ) test[testId] = true; /* * 16. * void removeConstants(String... constantsNames) * void removeConstants(Constant... constants) * void removeAllConstants() */ testId++; e.defineConstant("cx2",1); e.setExpressionString("1+2"); syn1 = e.checkSyntax(); n1 = e.getConstantsNumber(); e.removeConstants("asfdf"); syn2 = e.getSyntaxStatus(); n2 = e.getConstantsNumber(); e.removeConstants("cx1","cx2"); n3 = e.getConstantsNumber(); syn3 = e.checkSyntax(); e.removeConstants(c1); n4 = e.getConstantsNumber(); e.removeConstants(c2,c3); syn4 = e.getSyntaxStatus(); n5 = e.getConstantsNumber(); syn5 = e.checkSyntax(); e.removeAllConstants(); n6 = e.getConstantsNumber(); syn6 = e.getSyntaxStatus(); if ( n2 == n1 && n2-n3 == 2 && n3-n4 == 1 && n4-n5 == 2 && n6 == 0 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn3 == Expression.NO_SYNTAX_ERRORS && syn4 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn5 == Expression.NO_SYNTAX_ERRORS && syn6 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN ) test[testId] = true; /* * 17. * void addFunctions(Function... functions) * void addFunctions( ArrayList<Function> functionsList) * void defineFunction(String functionName, String functionExpressionString,... */ testId++; e = new Expression("1+2"); syn1 = e.checkSyntax(); e.addDefinitions(f6, f7); syn2 = e.getSyntaxStatus(); syn3 = e.checkSyntax(); e.addDefinitions(f1, f2, f3, f4, f6); syn4 = e.getSyntaxStatus(); e.removeDefinitions(f6); syn5 = e.checkSyntax(); e.defineFunction("ff1", "1", "x"); syn6 = e.getSyntaxStatus(); if ( e.getExpressionString().Equals("1+2") && e.getArgumentsNumber() == 0 && e.getConstantsNumber() == 0 && e.getFunctionsNumber() == 7 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn3 == Expression.NO_SYNTAX_ERRORS && syn4 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn5 == Expression.NO_SYNTAX_ERRORS && syn6 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN ) test[testId] = true; /* * 18. * int getFunctionIndex(String functionName) * Function getFunction(String functionName) * Function getFunction(int functionIndex) * int getFunctionsNumber() */ testId++; syn1 = e.checkSyntax(); i1 = e.getFunctionIndex("asdsa"); //-1 i2 = e.getFunctionIndex("f7"); //0 F1 = e.getFunction("asasas"); //null F2 = e.getFunction("f1"); //f1 F3 = e.getFunction(-1); //null F4 = e.getFunction(23);//null F5 = e.getFunction(0);//f7 n1 = e.getFunctionsNumber();//7 syn2 = e.getSyntaxStatus(); if ( i1 == -1 && i2 == 0 && F1 == null && F2 == f1 && F3 == null && F4 == null && F5 == f7 && n1 == 7 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.NO_SYNTAX_ERRORS ) test[testId] = true; /* * 19. * void removeFunctions(String... functionsNames) * void removeFunctions(Function... functions) * void removeAllFunctions() */ testId++; e.setExpressionString("1+2"); syn1 = e.checkSyntax(); n1 = e.getFunctionsNumber(); e.removeFunctions("asfdf"); syn2 = e.getSyntaxStatus(); n2 = e.getFunctionsNumber(); e.removeFunctions("f1","f2"); n3 = e.getFunctionsNumber(); syn3 = e.checkSyntax(); e.removeFunctions(f3); n4 = e.getFunctionsNumber(); e.removeFunctions(f6,f7); syn4 = e.getSyntaxStatus(); n5 = e.getFunctionsNumber(); syn5 = e.checkSyntax(); e.removeAllFunctions(); n6 = e.getFunctionsNumber(); syn6 = e.getSyntaxStatus(); if ( n2 == n1 && n2-n3 == 2 && n3-n4 == 1 && n4-n5 == 2 && n6 == 0 && syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn3 == Expression.NO_SYNTAX_ERRORS && syn4 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN && syn5 == Expression.NO_SYNTAX_ERRORS && syn6 == Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN ) test[testId] = true; /* * 20. * double calculate() * String getHelp() * String getHelp(String word) * String getLicense() */ testId++; syn1 = e.checkSyntax(); d1 = e.calculate(); syn2 = e.getSyntaxStatus(); if ( syn1 == Expression.NO_SYNTAX_ERRORS && syn2 == Expression.NO_SYNTAX_ERRORS && d1 == 3) test[testId] = true; /* * 21. Tokens */ testId++; e = new Expression("1+(2+3)-sin(10)"); List<Token> tokens = e.getCopyOfInitialTokens(); mXparser.consolePrintTokens(tokens); if ( (tokens[0].tokenStr.Equals("1")) && (tokens[1].tokenStr.Equals("+")) && (tokens[2].tokenStr.Equals("(")) && (tokens[3].tokenStr.Equals("2")) && (tokens[4].tokenStr.Equals("+")) && (tokens[5].tokenStr.Equals("3")) && (tokens[6].tokenStr.Equals(")")) && (tokens[7].tokenStr.Equals("-")) && (tokens[8].tokenStr.Equals("sin")) && (tokens[9].tokenStr.Equals("(")) && (tokens[10].tokenStr.Equals("10")) && (tokens[11].tokenStr.Equals(")")) && (tokens[0].tokenTypeId == ParserSymbol.NUMBER_TYPE_ID) && (tokens[1].tokenTypeId == Operator.TYPE_ID) && (tokens[2].tokenTypeId == ParserSymbol.TYPE_ID) && (tokens[3].tokenTypeId == ParserSymbol.NUMBER_TYPE_ID) && (tokens[4].tokenTypeId == Operator.TYPE_ID) && (tokens[5].tokenTypeId == ParserSymbol.NUMBER_TYPE_ID) && (tokens[6].tokenTypeId == ParserSymbol.TYPE_ID) && (tokens[7].tokenTypeId == Operator.TYPE_ID) && (tokens[8].tokenTypeId == Function1Arg.TYPE_ID) && (tokens[9].tokenTypeId == ParserSymbol.TYPE_ID) && (tokens[10].tokenTypeId == ParserSymbol.NUMBER_TYPE_ID) && (tokens[11].tokenTypeId == ParserSymbol.TYPE_ID) && (tokens[0].tokenLevel == 0) && (tokens[1].tokenLevel == 0) && (tokens[2].tokenLevel == 1) && (tokens[3].tokenLevel == 1) && (tokens[4].tokenLevel == 1) && (tokens[5].tokenLevel == 1) && (tokens[6].tokenLevel == 1) && (tokens[7].tokenLevel == 0) && (tokens[8].tokenLevel == 1) && (tokens[9].tokenLevel == 2) && (tokens[10].tokenLevel == 2) && (tokens[11].tokenLevel == 2) ) test[testId] = true; long end = mXparser.currentTimeMillis(); int nOk = 0; int nError = 0; for (int i = 0; i <= testId; i++) { if (test[i]) { nOk++; mXparser.consolePrintln("[" + i + "] " + "OK"); } else { nError++; mXparser.consolePrintln("[" + i + "] " + "ERROR"); } } mXparser.consolePrintln("OK : " + nOk + ", ERRORs: " + nError + ", total time: " + (end-start)/1000.0 + " s."); for (int i = 0; i <= testId; i++) { if (!test[i]) mXparser.consolePrintln("ERROR: " + testId); } return nError; }