public void TestCollectionConcatenation() { Dictionary test = CreateDictionary("Test"); NameSpace n1 = CreateNameSpace(test, "N1"); Collection c1 = CreateCollection(n1, "C", "Integer", 10 ); Variable v1 = CreateVariable(n1, "V1", "C"); Variable v2 = CreateVariable(n1, "V2", "C"); Variable v3 = CreateVariable(n1, "V3", "C"); RuleCondition rc1 = CreateRuleAndCondition(n1, "Rule1"); Action a1 = CreateAction(rc1, "V1 <- [1, 2, 3] + [4, 5, 6]"); Action a2 = CreateAction(rc1, "V2 <- [] + [4, 5, 6]"); Action a3 = CreateAction(rc1, "V3 <- [1, 2, 3] + []"); // ReSharper disable once UseObjectOrCollectionInitializer Runner runner = new Runner(false); runner.Cycle(); { ListValue value = v1.Value as ListValue; Assert.IsNotNull(value); Assert.AreEqual(6, value.Val.Count); } { ListValue value = v2.Value as ListValue; Assert.IsNotNull(value); Assert.AreEqual(3, value.Val.Count); } { ListValue value = v3.Value as ListValue; Assert.IsNotNull(value); Assert.AreEqual(3, value.Val.Count); } }
public void TestCollectionConcatenation() { Dictionary dictionary = CreateDictionary("Test"); NameSpace nameSpace = CreateNameSpace(dictionary, "NameSpace"); Structure structure = CreateStructure(nameSpace, "ModelElement"); StructureElement structElem = CreateStructureElement(structure, "Value", "Boolean"); structElem.setDefault("True"); Collection collection = CreateCollection(nameSpace, "Coll", "ModelElement", 10); collection.Type = structure; collection.setMaxSize(3); collection.Default = "[]"; Variable variable = CreateVariable(nameSpace, "V", "Coll"); RuleCondition ruleCondition = CreateRuleAndCondition(nameSpace, "Test"); Action action = CreateAction(ruleCondition, "V <- V + [ModelElement{Value => True}] "); RuleCheckerVisitor visitor = new RuleCheckerVisitor(dictionary); visitor.visit(nameSpace); Util.IsThereAnyError isThereAnyError = new Util.IsThereAnyError(); Assert.AreEqual(0, isThereAnyError.ErrorsFound.Count); Assert.AreEqual("[]", variable.Value.LiteralName); Runner runner = new Runner(false); runner.Cycle(); Assert.AreEqual("[" + structure.DefaultValue.LiteralName + "]", variable.Value.LiteralName); runner.Cycle(); Assert.AreEqual("[" + structure.DefaultValue.LiteralName + ", " + structure.DefaultValue.LiteralName + "]", variable.Value.LiteralName); runner.Cycle(); Assert.AreEqual("[" + structure.DefaultValue.LiteralName + ", " + structure.DefaultValue.LiteralName + ", " + structure.DefaultValue.LiteralName + "]", variable.Value.LiteralName); // In this case, the new collection cannot be placed in the variable runner.Cycle(); Assert.AreEqual(1, action.Messages.Count); Assert.AreEqual(ElementLog.LevelEnum.Error, action.Messages[0].Level); }
public void TestUncacheFunctionBasedOnInnerFunctionCall() { Dictionary test = CreateDictionary("Test"); NameSpace n1 = CreateNameSpace(test, "N1"); Collection c = CreateCollection(n1, "C", "Integer", 10); Variable a = CreateVariable(n1, "a", "C"); a.setDefaultValue("[1]"); Variable b = CreateVariable(n1, "b", "C"); b.setDefaultValue("[10]"); Function f = CreateFunction(n1, "f", "C"); Case always_f = CreateCase(f, "Always", "g() + h()"); Function g = CreateFunction(n1, "g", "C"); Case always_g = CreateCase(g, "Always", "a"); Function h = CreateFunction(n1, "h", "C"); Case always_h = CreateCase(h, "Always", "b"); RuleCondition updateGlobalVariables = CreateRuleAndCondition(n1, "Update Global variables"); Action act1 = CreateAction(updateGlobalVariables, "a <- a + [2]"); Action act2 = CreateAction(updateGlobalVariables, "b <- b + [20]"); Compiler.Compile_Synchronous(true); Expression expression = new Parser().Expression(test, "N1.f()"); ListValue value = expression.GetExpressionValue(new InterpretationContext(), null) as ListValue; Assert.IsNotNull(value); Assert.AreEqual(2, value.Val.Count); // ReSharper disable once UseObjectOrCollectionInitializer Runner runner = new Runner(false); runner.CheckForCompatibleChanges = true; runner.Cycle(); value = expression.GetExpressionValue(new InterpretationContext(), null) as ListValue; Assert.IsNotNull(value); Assert.AreEqual(4, value.Val.Count); }
public void TestRefactorStructureName() { Dictionary test = CreateDictionary("Test"); NameSpace n1 = CreateNameSpace(test, "N1"); Collection collection = CreateCollection(n1, "Col", "Integer", 10); Variable v = CreateVariable(n1, "V", "Col"); v.setDefaultValue("[]"); RuleCondition rc1 = CreateRuleAndCondition(n1, "Rule1"); Action a1 = CreateAction(rc1, "INSERT 1 IN V"); RuleCondition rc2 = CreateRuleAndCondition(n1, "Rule2"); Action a2 = CreateAction(rc2, "INSERT 2 IN V"); // ReSharper disable once UseObjectOrCollectionInitializer Runner runner = new Runner(false); runner.CheckForCompatibleChanges = true; runner.Cycle(); ListValue listValue = v.Value as ListValue; Assert.IsNotNull(listValue); Assert.AreEqual(2, listValue.Val.Count); Assert.AreEqual(0, a1.Messages.Count); Assert.AreEqual(0, a2.Messages.Count); }
public void TestStabilize() { Dictionary test = CreateDictionary("Test"); NameSpace n1 = CreateNameSpace(test, "N1"); Variable v1 = CreateVariable(n1, "V", "Double"); v1.setDefaultValue("0.0"); RuleCondition rc1 = CreateRuleAndCondition(n1, "Rule1"); Action a1 = CreateAction(rc1, "V <- STABILIZE (LAST v IN VALUES) / 2.0 INITIAL_VALUE 100.0 STOP_CONDITION PREVIOUS - CURRENT < 10.0 "); // ReSharper disable once UseObjectOrCollectionInitializer Runner runner = new Runner(false); runner.Cycle(); DoubleValue value = v1.Value as DoubleValue; Assert.IsNotNull(value); Assert.AreEqual(6.25, value.Val); }
public void TestSubRulesPriority() { Dictionary test = CreateDictionary("Test"); NameSpace n1 = CreateNameSpace(test, "N1"); Variable v1 = CreateVariable(n1, "V", "Integer"); v1.setDefaultValue("0"); Variable v2 = CreateVariable(n1, "V2", "Integer"); v2.setDefaultValue("0"); // Priority is Processing RuleCondition rc1 = CreateRuleAndCondition(n1, "Rule1"); Action a1 = CreateAction(rc1, "V2 <- V2 + 1"); // Priority is Update out RuleCondition rc2 = CreateRuleAndCondition(rc1, "Rule2"); rc2.EnclosingRule.setPriority(acceptor.RulePriority.aUpdateOUT); Action a2 = CreateAction(rc2, "V <- V + 1"); // ReSharper disable once UseObjectOrCollectionInitializer Runner runner = new Runner(false); runner.Cycle(); IntValue value = v1.Value as IntValue; Assert.IsNotNull(value); Assert.AreEqual(1, value.Val); value = v2.Value as IntValue; Assert.IsNotNull(value); Assert.AreEqual(1, value.Val); }
public void TestUncacheFunctionOfFunction() { Dictionary test = CreateDictionary("Test"); NameSpace n1 = CreateNameSpace(test, "N1"); Variable v = CreateVariable(n1, "Var", "Boolean"); v.setDefaultValue("True"); Function F1 = CreateFunction(n1, "FunOfVar", "Integer"); Case cas1_1 = CreateCase(F1, "Var is true", "1", "Var"); Case cas1_2 = CreateCase(F1, "Var is false", "2"); Function F2 = CreateFunction(n1, "FunOfFun", "Boolean"); Case cas2_1 = CreateCase(F2, "Value", "FunOfVar() == 2"); RuleCondition rc = CreateRuleAndCondition(n1, "Rule1"); Action a = CreateAction(rc, "Var <- False"); Compiler.Compile_Synchronous(true); Expression expression = new Parser().Expression(test, "N1.FunOfFun()"); IValue value = expression.GetExpressionValue(new InterpretationContext(), null); Assert.AreEqual(value, System.BoolType.False); // ReSharper disable once UseObjectOrCollectionInitializer Runner runner = new Runner(false); runner.CheckForCompatibleChanges = true; runner.Cycle(); value = expression.GetExpressionValue(new InterpretationContext(), null); Assert.AreEqual(value, System.BoolType.True); }