/* Generated By:JJTree&JavaCC: Do not edit this line. AtFormulaParser.java */ package org.openntf.domino.tests.rpr.formula; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import lotus.domino.NotesException; import lotus.domino.Session; import org.openntf.domino.thread.DominoThread; import org.openntf.domino.utils.Factory; import org.openntf.domino.utils.Factory.SessionType; import org.openntf.formula.ASTNode; import org.openntf.formula.FormulaContext; import org.openntf.formula.FormulaParser; import org.openntf.formula.Formulas; import org.openntf.formula.Function; public class TestRunner extends TestRunnerStdIn { public static void main(final String[] args) { DominoThread thread = new DominoThread(new TestRunner(), "My thread"); thread.start(); } public TestRunner() { // whatever you might want to do in your constructor, but stay away from Domino objects } @SuppressWarnings({ "null", "unchecked" }) @Override public void run() { Factory.enableCounters(true, false); try { System.out.println("Please type a Lotus domino @formula. Quit with CTRL+Z:"); ASTNode n = null; List<Object> v = null; //String str = "t:={start}; @for(i:=1;i != 10; i:= i + 1; t:=t:@if(i = 1; {one} ; i <= 3; {two or three}; {four or more})); t"; //String str = "x:=1:2*+32:64:1;x**x**x**x"; String str = "@time(1800;2;3;4;15;18)"; //String str = "@Transform((1:2:3)*+(0:3:6:9);{x};x*x)"; System.out.println("Formula to test: " + str); long time = System.currentTimeMillis(); //String str = "\"ab\\n\\x\\\"xyzz\""; //String str = "t:={start}; @for(i:=1;i != 10; i:= i + 1; t:=t:@Text(i)); @Transform(t;{x};x+{ test }+t)"; //System.out.println(str); List<Function> funcs = new ArrayList<Function>(); funcs.addAll(Formulas.getFunctionFactory().getFunctions().values()); Collections.sort(funcs, new Comparator<Function>() { @Override public int compare(final Function o1, final Function o2) { return o1.toString().compareTo(o2.toString()); } }); for (Function func : funcs) { System.out.println(func); } FormulaParser parser = Formulas.getParser(); for (int i = 1; i < 10000; i++) { java.io.StringReader sr = new java.io.StringReader(str); //java.io.Reader r = new java.io.BufferedReader(sr); n = parser.parse(sr, false); } time = System.currentTimeMillis() - time; System.err.println("[FormulaEngine] 10000x building AST tree\ttook " + time + "ms."); //n.dump(""); time = System.currentTimeMillis(); for (int i = 1; i < 10000; i++) { FormulaContext ctx = Formulas.createContext(null, parser); v = n.solve(ctx); } time = System.currentTimeMillis() - time; System.err.println("[FormulaEngine] 10000x evaluating AST tree\ttook " + time + "ms."); System.out.println("Result:\t" + v); org.openntf.domino.Session odaSess = Factory.getSession(SessionType.CURRENT); Session sess = odaSess.getFactory().toLotus(odaSess); @SuppressWarnings("unused") long startEvaluate = System.currentTimeMillis(); try { time = System.currentTimeMillis(); for (int i = 1; i < 10000; i++) { v = sess.evaluate(str); } time = System.currentTimeMillis() - time; System.err.println("[NotesNative] 10000x calling session.evaluate\ttook " + time + "ms."); System.out.println("Result:\t" + v); } catch (NotesException e) { e.printStackTrace(); } System.out.println("Thank you."); } catch (Exception e) { e.printStackTrace(); } } }