public void DictForVar2Iter() { var loop1 = new Dictionary <object, object>() { { "a", 10 } }; var loop2 = new Dictionary <object, object>() { { "a", 20 } }; var loopdict = new ObjectValue(new Dictionary <object, object>[] { loop1, loop2 }); var statement1 = new ExpressionStatement(new VariableValue("a")); var exprStatement = new ObjectValue(new ListOfStatementsExpression(new IStatement[] { statement1 })); var forLoop = new FunctionExpression("map", loopdict, exprStatement); var c = new RootContext(); var r = forLoop.Evaluate(c); Assert.IsNotNull(r, "for loop with nothing in it"); var lst = r as IEnumerable <object>; Assert.IsNotNull(lst, "results isn't in good form!"); Assert.AreEqual(2, lst.Count()); Assert.AreEqual(10, lst.First()); Assert.AreEqual(20, lst.Skip(1).First()); }
public void DictForCacheNotKept() { var loop1 = new Dictionary <object, object>() { { "a", 10 } }; var loop2 = new Dictionary <object, object>() { { "a", 20 } }; var loopdict = new ObjectValue(new Dictionary <object, object>[] { loop1, loop2 }); var dictEval = new Tuple <IExpression, IExpression>[] { new Tuple <IExpression, IExpression>(new StringValue("hi"), new VariableValue("a")) }; var dict = new DictionaryValue(dictEval); var lookup = new IndexerRefExpression(dict, new StringValue("hi")); var statement1 = new ExpressionStatement(lookup); var exprStatement = new ListOfStatementsExpression(new IStatement[] { statement1 }); var forLoop = new FunctionExpression("for", loopdict, exprStatement); var c = new RootContext(); var r = forLoop.Evaluate(c); Assert.AreEqual(20, r, "for loop with nothing in it"); }
public void ArgExpressionIsSpecificIncorrect() { var v = new IntegerValue(5); var fo = new FunctionExpression("GetMeWithIndex2", v); var c = new RootContext(); var r = fo.Evaluate(c); }
/// <summary> /// Add two dictionaries together. We just try to loop over everything one at a time. /// </summary> /// <param name="ctx"></param> /// <param name="o1"></param> /// <param name="o2"></param> /// <returns></returns> public static Dictionary <object, object> OperatorPlus(IScopeContext ctx, IDictionary <object, object> o1, IDictionary <object, object> o2) { var r = new Dictionary <object, object>(); foreach (var k in o1.Keys.Concat(o2.Keys).Distinct()) { object v1 = null; object v2 = null; o1.TryGetValue(k, out v1); o2.TryGetValue(k, out v2); object opresult = null; if (v1 == null) { opresult = v2; } else if (v2 == null) { opresult = v1; } else { var calc = new FunctionExpression("+", new ObjectValue(v1), new ObjectValue(v2)); opresult = calc.Evaluate(ctx); } if (opresult != null) { r[k] = opresult; } } return(r); }
public void TestPlusNotDefined() { var fo = new FunctionExpression("/", new IExpression[] { new IntegerValue(7), new VariableValue("p") }); var c = new RootContext(); c.SetVariableValue("p", new OperatorTestNotDefined()); var r = fo.Evaluate(c); }
public void TestDivideCommutation2() { var fo = new FunctionExpression("/", new IExpression[] { new IntegerValue(7), new VariableValue("p") }); var c = new RootContext(); c.SetVariableValue("p", new OperatorTestObjects()); var r = fo.Evaluate(c); }
public void TestBasicCalling() { var fo = new FunctionExpression("GetMe", new IExpression[] { new StringValue("hi there") }); var c = new RootContext(); var r = fo.Evaluate(c); Assert.AreEqual(8, r, "function result"); }
public void LoadFileWithSideEffects() { var f = new FunctionExpression("include", new IExpression[] { new StringValue("LoadFileWithSideEffects.plotlingo") }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(5, c.GetVariableValue("i"), "variable i"); }
public void TestEvalWithContextUpdate() { var f = new FunctionExpression("eval", new IExpression[] { new StringValue("i=5;") }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(5, c.GetVariableValue("i"), "variable i"); }
public void TestEvalNumber() { var f = new FunctionExpression("eval", new IExpression[] { new StringValue("5;") }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(5, r, "simple eval"); }
public void ScriptWithComments() { var f = new FunctionExpression("include", new IExpression[] { new StringValue("ScriptWithComments.plotlingo") }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(5, c.GetVariableValue("i"), "variable i"); }
public void TestFunctionCallWithContextNoArg() { var fo = new FunctionExpression("GetMeContext", new IExpression[] { }); var c = new RootContext(); var r = fo.Evaluate(c); Assert.AreEqual(12, r, "function result"); }
public void TestAddDoubleAndInt() { var f = new FunctionExpression("+", new IExpression[] { new DoubleValue(7.5), new IntegerValue(2) }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(9.5, r, "7.5+2"); }
public void SumEmptyObjectArray() { var ar = new object[] { }; var f = new FunctionExpression("sum", new ObjectValue(ar)); var c = new RootContext(); var r = f.Evaluate(c); }
public void TestMultiplyDoubles() { var f = new FunctionExpression("*", new IExpression[] { new DoubleValue(1.1), new DoubleValue(2.0) }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(2.2, r, "7.5+1.3"); }
public void TestDivideDoubles() { var f = new FunctionExpression("/", new IExpression[] { new DoubleValue(2.2), new DoubleValue(2.0) }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(1.1, r, "7.5+1.3"); }
public void TestDivideInts() { var f = new FunctionExpression("/", new IExpression[] { new IntegerValue(4), new IntegerValue(8) }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(0.5, r, "4+5"); }
public void TestSubtractDoubles() { var f = new FunctionExpression("-", new IExpression[] { new DoubleValue(7.5), new DoubleValue(1.3) }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(6.2, r, "7.5+1.3"); }
public void TestSubtractInts() { var f = new FunctionExpression("-", new IExpression[] { new IntegerValue(4), new IntegerValue(5) }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(-1, r, "4+5"); }
public void TestMultiplyInts() { var f = new FunctionExpression("*", new IExpression[] { new IntegerValue(4), new IntegerValue(5) }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(20, r, "4+5"); }
public void TestDivideDoubleAndInt1() { var f = new FunctionExpression("/", new IExpression[] { new DoubleValue(8), new IntegerValue(2) }); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(4.0, r, "7.5+2"); }
public void ScriptFileSetCorrectlyDuringLoad() { var f = new FunctionExpression("include", new IExpression[] { new StringValue("ReturnCurrentScriptName.plotlingo") }); var c = new RootContext(); var r = f.Evaluate(c) as string; Assert.IsTrue(r.Contains("ReturnCurrentScriptName.plotlingo"), "the script name in the file"); }
public void TestEvaluate() { var expression = new FunctionExpression( "testFunc", (p, a) => 123, new [] { Mock.Of <IExpression>(e => e.Evaluate(It.IsAny <IDictionary <string, object> >()) == (object)1) }); Assert.AreEqual(123, expression.Evaluate(null)); }
public void TestIExpreFunction() { var v = new IntegerValue(5); var fo = new FunctionExpression("GetMeWithIndex", v); var c = new RootContext(); var r = fo.Evaluate(c); Assert.AreEqual(5, r, "expression called failed"); }
public void ArgExpressionIsSpecificCorrect() { var v = new StringValue("5"); var fo = new FunctionExpression("GetMeWithIndex2", v); var c = new RootContext(); var r = fo.Evaluate(c); Assert.AreEqual("5", r, "expression called failed"); }
public void CurrentScriptFunction() { var f = new FunctionExpression("currentscript"); var c = new RootContext(); c.ExecutionContext.ScriptFileContextPush(new FileInfo(@"{0}\bogus.plotlingo")); var r = f.Evaluate(c) as string; Assert.IsTrue(r.Contains("bogus.plotlingo"), "Current script filename"); }
public void TestMultiplyCommutation2() { var fo = new FunctionExpression("*", new IExpression[] { new IntegerValue(7), new VariableValue("p") }); var c = new RootContext(); c.SetVariableValue("p", new OperatorTestObjects()); var r = fo.Evaluate(c); Assert.AreEqual(14, r, "Operator result"); }
public void SumDoubleObjectArray() { var ar = new object[] { 5, 6 }; var f = new FunctionExpression("sum", new ObjectValue(ar)); var c = new RootContext(); var r = f.Evaluate(c); Assert.AreEqual(11, r); }
/// <summary> /// Divide a list of items by something else. Depends on the divide function being defined, of course! /// </summary> /// <param name="input"></param> /// <param name="divisor"></param> /// <returns></returns> public static IEnumerable <object> OperatorDivide(IEnumerable <object> input, object divisor) { var c = new RootContext(); var r = input.Select(num => { var fo = new FunctionExpression("/", new ObjectValue(num), new ObjectValue(divisor)); return(fo.Evaluate(c)); }); return(r); }
public void SimpleStringPlus() { var cl = new FunctionExpression("+", new StringValue("hi"), new StringValue(" there")); var c = new RootContext(); var r = cl.Evaluate(c); Assert.IsInstanceOfType(r, typeof(string), "type of result"); var rut = r as string; Assert.AreEqual("hi there", rut); }