public void test_detection_of_auto_created_variables() { var p = new ParserX(); p.EnableAutoCreateVar(true); p.SetExpr("a+b+c+d"); var expr_var = p.GetExprVar(); var var = p.GetVar(); Assert.AreEqual(4, expr_var.Count); Assert.AreEqual(4, var.Count); }
public void test_variable_remains_unchanged_after_operation() { var p = new ParserX(); p.EnableAutoCreateVar(true); p.SetExpr("v = 3.14"); var v = p.Eval(); Assert.AreEqual('f', v.GetValueType()); Assert.AreEqual(3.14, v.AsFloat()); p.SetExpr("v * 2"); var ans = p.Eval(); // Perform arithmitic operation on variable Assert.AreEqual('f', ans.GetValueType()); Assert.AreEqual(6.28, ans.AsFloat()); Assert.AreEqual('f', v.GetValueType()); Assert.AreEqual(3.14, v.AsFloat()); }
private static void Initialise(ParserX parser) { // Create an array variable Value arr1 = new Value(3, 0); arr1[0] = (1.0); arr1[1] = 2.0; arr1[2] = 3.0; Value arr2 = new Value(3, 0); arr2[0] = 4.0; arr2[1] = 3.0; arr2[2] = 2.0; Value arr3 = new Value(4, 0); arr3[0] = 1.0; arr3[1] = 2.0; arr3[2] = 3.0; arr3[3] = 4.0; Value arr4 = new Value(3, 0); arr4[0] = 4.0; arr4[1] = false; arr4[2] = "hallo"; // Create a 3x3 matrix with zero elements Value m1 = new Value(3, 3, 0); m1[0, 0] = 1.0; m1[1, 1] = 1.0; m1[2, 2] = 1.0; Value m2 = new Value(3, 3, 0); m2[0, 0] = 1.0; m2[0, 1] = 2.0; m2[0, 2] = 3.0; m2[1, 0] = 4.0; m2[1, 1] = 5.0; m2[1, 2] = 6.0; m2[2, 0] = 7.0; m2[2, 1] = 8.0; m2[2, 2] = 9.0; Value[] val = new Value[5]; val[0] = 1.1; val[1] = 1.0; val[2] = false; val[3] = "Hello"; val[4] = "World"; Value[] fVal = new Value[3]; fVal[0] = 1; fVal[1] = 2.22; fVal[2] = 3.33; Value[] sVal = new Value[3]; sVal[0] = "hello"; sVal[1] = "world"; sVal[2] = "test"; Value[] cVal = new Value[3]; cVal[0] = new Complex(1, 1); cVal[1] = new Complex(2, 2); cVal[2] = new Complex(3, 3); var size_3x1 = new Value(1, 2, 0); size_3x1.At(0, 0) = 3.0; size_3x1.At(0, 1) = 1.0; parser.DefineVar("s31", new Variable(size_3x1)); Value ans = new Value(0); parser.DefineVar("ans", new Variable(ans)); // some tests for vectors parser.DefineVar("va", new Variable(arr1)); parser.DefineVar("vb", new Variable(arr2)); parser.DefineVar("vc", new Variable(arr3)); parser.DefineVar("vd", new Variable(arr4)); parser.DefineVar("m1", new Variable(m1)); parser.DefineVar("m2", new Variable(m2)); parser.DefineVar("a", new Variable(fVal[0])); parser.DefineVar("b", new Variable(fVal[1])); parser.DefineVar("c", new Variable(fVal[2])); parser.DefineVar("ca", new Variable(cVal[0])); parser.DefineVar("cb", new Variable(cVal[1])); parser.DefineVar("cc", new Variable(cVal[2])); parser.DefineVar("sa", new Variable(sVal[0])); parser.DefineVar("sb", new Variable(sVal[1])); // Add functions for inspecting the parser properties parser.DefineFun(new FunListVar()); parser.DefineFun(new FunListFunctions()); parser.DefineFun(new FunListConst()); parser.DefineFun(new FunBenchmark()); parser.DefineFun(new FunEnableOptimizer()); parser.DefineFun(new FunSelfTest()); parser.DefineFun(new FunEnableDebugDump()); parser.DefineFun(new FunTest0()); parser.DefineFun(new FunPrint()); parser.DefineFun(new FunLang()); parser.EnableAutoCreateVar(true); #if DEBUG ParserXBase.EnableDebugDump(bDumpStack: false, bDumpRPN: false); #endif Value x = 1.0; Value y = new Complex(0, 1); parser.DefineVar("x", new Variable(x)); parser.DefineVar("y", new Variable(y)); }