public void ParseAndEvaluateTest() { var expression = SMExpressionParser.ParseOrThrow("log(10) + $aaa + abs(nolog($adc_Controller)) + 1*2"); var simpleExpressionContext = new TestExpressionContext(); var ev = new EvaluatorVisitor(simpleExpressionContext, new TestSymbolTable(), new DefaultFunctionContext()); expression.Accept(ev); Assert.AreEqual(14.0, ev.Value, 1e-9); }
public void ParseAndCompileTest() { var expression = SMExpressionParser.ParseOrThrow("log(10) + $aaa + abs(nolog($adc_Controller)) + 1*2"); var simpleExpressionContext = new TestExpressionContext(); var compiler = new CompileVisitor(simpleExpressionContext, new TestSymbolTable(), new DefaultCallContext()); expression.Accept(compiler); var compiledExpression = compiler.GetCompiledExpression(); Assert.AreEqual(14.0, compiledExpression(), 1e-9); }
public void ParseAndEvaluatePerformanceTest() { var expression = SMExpressionParser.ParseOrThrow("log(10) + $aaa + abs(nolog($adc_Controller)) + 1*2"); var simpleExpressionContext = new TestExpressionContext(); var symbolTable = new TestSymbolTable(); var times = 1000000; var sw = Stopwatch.StartNew(); for (int i = 0; i < times; ++i) { var evaluator = new EvaluatorVisitor(simpleExpressionContext, symbolTable, new DefaultFunctionContext()); expression.Accept(evaluator); } var elapsed = sw.ElapsedMilliseconds; Console.WriteLine($"Evaluated: {elapsed}ms"); }
public void ParseAndCompilePerformanceTest() { var expression = SMExpressionParser.ParseOrThrow("log(10) + $aaa + abs(nolog($adc_Controller)) + 1*2"); var simpleExpressionContext = new TestExpressionContext(); var compiler = new CompileVisitor(simpleExpressionContext, new TestSymbolTable(), new DefaultCallContext()); expression.Accept(compiler); var compiledExpression = compiler.GetCompiledExpression(); var times = 1000000; var sw = Stopwatch.StartNew(); for (int i = 0; i < times; ++i) { compiledExpression(); } var elapsed = sw.ElapsedMilliseconds; Console.WriteLine($"Compiled: {elapsed}ms"); }