コード例 #1
0
        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());
        }
コード例 #2
0
ファイル: ForLoopTest.cs プロジェクト: gordonwatts/PlotLingo
        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");
        }
コード例 #3
0
 public void ArgExpressionIsSpecificIncorrect()
 {
     var v  = new IntegerValue(5);
     var fo = new FunctionExpression("GetMeWithIndex2", v);
     var c  = new RootContext();
     var r  = fo.Evaluate(c);
 }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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");
        }
コード例 #8
0
        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");
        }
コード例 #9
0
        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");
        }
コード例 #10
0
        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");
        }
コード例 #11
0
        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");
        }
コード例 #12
0
        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");
        }
コード例 #13
0
        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");
        }
コード例 #14
0
        public void SumEmptyObjectArray()
        {
            var ar = new object[] { };
            var f  = new FunctionExpression("sum", new ObjectValue(ar));

            var c = new RootContext();
            var r = f.Evaluate(c);
        }
コード例 #15
0
        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");
        }
コード例 #16
0
        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");
        }
コード例 #17
0
        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");
        }
コード例 #18
0
        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");
        }
コード例 #19
0
        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");
        }
コード例 #20
0
        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");
        }
コード例 #21
0
        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");
        }
コード例 #22
0
        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");
        }
コード例 #23
0
        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));
        }
コード例 #24
0
        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");
        }
コード例 #25
0
        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");
        }
コード例 #26
0
        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");
        }
コード例 #27
0
        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");
        }
コード例 #28
0
        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);
        }
コード例 #29
0
        /// <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);
        }
コード例 #30
0
        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);
        }