Example #1
0
        public void TestInspectParameters()
        {
            var a2 = new ColaNode("a2");
            var b1 = new ColaNode("b1");
            var a1 = new ColaNode("a1", a2, b1);

            a1.Script = "a11 = a1.a2.a22 + 2; a11 = a11;";
            a2.Script = "a11 = a1.a2.a22 + 2; a1.a11 = a11;";
            b1.Script = "a1.a2.a22 = b12 * b14";

            a2.ParamValues.Add(new Parameter("a22"), 22);

            var cc = new CocaContext(a1);
            var findings = cc.InspectCompositionAndParameters();
            ValidateInspectParametersFindings(findings);

            try
            {
                cc.Eval();
            }
            catch (FatalFindingsException ffe)
            {
                ValidateInspectParametersFindings(ffe.Findings);
                throw;
            }
        }
Example #2
0
        public void TestEvalSuccess()
        {
            // construction test coca
            var a2 = new ColaNode("a2");
            var b1 = new ColaNode("b1");
            var a1 = new ColaNode("a1", a2, b1);
            a1.Script = "a11 = a1.a2.a22 + 2; a11 = a11;";
            a2.Script = "a11 = a1.a2.a22 + 2; a1.a11 = a11;";
            b1.Script = "a1.a2.a22 = b12 * b14";
            a2.ParamValues.Add(new Parameter("a22"), 22);
            b1.ParamValues.Add(new Parameter("b12"), 12);
            b1.ParamValues.Add(new Parameter("b14"), 14);
            var cc = new CocaContext(a1);

            // checking out the findings
            var findings = cc.InspectCompositionAndParameters();
            Assert.IsFalse(findings.AreFatal);
            Assert.AreEqual(2, findings.Count);
            Assert.IsTrue(findings[0] is ParameterValueIsNeverUsedFactum);
            Assert.IsTrue(findings[1] is ParameterIsMutatedSeveralTimesFactum);
            var pvinuf = findings[0] as ParameterValueIsNeverUsedFactum;
            Assert.AreEqual("[a1.a2, a1.b1, a1]", pvinuf.Bottle.ToString());
            Assert.AreEqual("a1.a2.a22", pvinuf.Param.ToString());
            var pimstf = findings[1] as ParameterIsMutatedSeveralTimesFactum;
            Assert.AreEqual("[a1.a2, a1.b1, a1]", pimstf.Bottle.ToString());
            Assert.AreEqual("a1.a11", pimstf.Param.ToString());
            AssertHelper.SequenceIsomorphic(new[] { "a1", "a1.a2" }, pimstf.Nodes.Select(n => n.ToString()));

            // ensuring that values and execution plan are fine
            Assert.AreEqual("[a1.a2.a22 = 22, a1.b1.b12 = 12, a1.b1.b14 = 14]", cc.ParamValues.ToString());
            Assert.AreEqual("a1.b1, a1, a1.a2", cc.ExecutionPlan.StringJoin());

            // run the calculations and check their results
            var cs = cc.Eval();
            Assert.AreEqual("[* = [a1.a2.a22 = 168], + = [a1.a11 = 170, a1.a2.a11 = 170], - = <empty>, " +
                "base = [a1.a2.a22 = 22, a1.b1.b12 = 12, a1.b1.b14 = 14]]", cs.ToString());

            // ensure that only after being accepted the results get saved to the coca
            Assert.AreEqual("[a1.a2.a22 = 22, a1.b1.b12 = 12, a1.b1.b14 = 14]", cc.ParamValues.ToString());
            cs.Accept();
            Assert.AreEqual("[a1.a2.a22 = 168, a1.a2.a11 = 170, " +
                "a1.b1.b12 = 12, a1.b1.b14 = 14, a1.a11 = 170]", cc.ParamValues.ToString());
        }