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; } }
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()); }