private void RunVisio2003ImplicationProperties_3_0(bool strict) { using(Visio2003Adapter va = new Visio2003Adapter(ruleFilesFolder + "test-3_0" + (strict?"-strict":"") + ".vdx", FileAccess.Read, strict)) { CommonVisio2003ImplicationProperties(1, 5, va, false); foreach(Implication i in va.Implications) { if (i.Label == "imp1") { Assert.IsTrue(i.Deduction.HasFormula, "imp1: HasFormula"); Atom atom = (Atom)i.AtomGroup.Members[0]; Assert.IsTrue(atom.HasSlot, "Has Slot"); Assert.IsInstanceOfType(typeof(byte[]), atom.GetPredicateValue(1), "Typed predicate support"); Assert.IsInstanceOfType(typeof(Function), atom.Members[2], "Basic slot type predicate support"); Assert.AreEqual("Size", atom.SlotNames[2], "Basic slot name predicate support"); Assert.IsInstanceOfType(typeof(int), atom.GetPredicateValue(3), "Typed slot type predicate support"); Assert.AreEqual("Year", atom.SlotNames[3], "Typed slot name predicate support"); Assert.AreEqual(2006, atom.GetPredicate("Year").Value, "Typed slot value support"); break; } } Assert.AreEqual(1, va.IntegrityQueries.Count, "Integrity Queries Count"); Assert.AreEqual("iq1", va.IntegrityQueries[0].Label, "Integrity Query Label"); Assert.AreEqual(2, va.Equivalents.Count, "Equivalents count"); foreach(Equivalent equivalent in va.Equivalents) Assert.AreEqual("eq1", equivalent.Label, "Equivalent label"); List<string> expected = new List<string>(new string[] {"own{?person,?stuff} == possess{?person,?stuff}", "own{?person,?stuff} == belong{?stuff,?person}"}); foreach(Equivalent equivalent in va.Equivalents) { Assert.IsTrue(expected.Contains(equivalent.ToString()), equivalent.ToString() + " found."); expected.Remove(equivalent.ToString()); } } }
private void CommonVisio2003ImplicationProperties(int expectedQueryCount, int expectedImplicationCount, Visio2003Adapter va, bool onlyAssert) { Assert.AreEqual(expectedQueryCount, va.Queries.Count, "expectedQueryCount"); foreach(Query q in va.Queries) { if (q.Label == "q1") { Assert.AreEqual(1, q.AtomGroup.AllAtoms.Count, "Count of query atoms"); } } Assert.AreEqual(expectedImplicationCount, va.Implications.Count, "expectedImplicationCount"); foreach(Implication i in va.Implications) { if (i.Label == "imp1") { Assert.AreEqual(70, i.Priority, "imp1: Priority"); Assert.AreEqual("imp2", i.Mutex, "imp1: Mutex"); Assert.AreEqual("imp3", i.Precondition, "imp1: Precondition"); Assert.AreEqual(ImplicationAction.Assert, i.Action, "imp1: Assert"); } else if (i.Label == "imp2") { Assert.AreEqual(20, i.Priority, "imp2: Priority"); Assert.AreEqual("imp1", i.Mutex, "imp2: Mutex"); Assert.AreEqual("imp3", i.Precondition, "imp2: Precondition"); Assert.AreEqual(onlyAssert?ImplicationAction.Assert:ImplicationAction.Retract, i.Action, "imp2: Retract"); } else if (i.Label == "imp3") { Assert.AreEqual(50, i.Priority, "imp3: Priority"); Assert.AreEqual(String.Empty, i.Mutex, "imp3: Mutex"); Assert.AreEqual(String.Empty, i.Precondition, "imp3: Precondition"); Assert.AreEqual(ImplicationAction.Assert, i.Action, "imp3: Assert"); } else if (i.Label == "imp4") { Assert.AreEqual(50, i.Priority, "imp4: Priority"); Assert.AreEqual(String.Empty, i.Mutex, "imp4: Mutex"); Assert.AreEqual(String.Empty,i.Precondition, "imp4: Precondition"); Assert.AreEqual(onlyAssert?ImplicationAction.Assert:ImplicationAction.Count, i.Action, "imp4: Count"); } else if (i.Label == "imp5") { Assert.AreEqual(50, i.Priority, "imp5: Priority"); Assert.AreEqual(String.Empty, i.Mutex, "imp5: Mutex"); Assert.AreEqual(String.Empty, i.Precondition, "imp5: Precondition"); Assert.AreEqual(onlyAssert?ImplicationAction.Assert:ImplicationAction.Modify, i.Action, "imp4: Modify"); } } }
public void Visio2003ImplicationProperties_2_2() { using(Visio2003Adapter va = new Visio2003Adapter(ruleFilesFolder + "test-2_2.vdx", FileAccess.Read)) { CommonVisio2003ImplicationProperties(0, 4, va, false); } }
public void Visio2003ImplicationProperties_2_3() { using(Visio2003Adapter va = new Visio2003Adapter(ruleFilesFolder + "test-2_3.vdx", FileAccess.Read)) { CommonVisio2003ImplicationProperties(1, 5, va, false); foreach(Implication i in va.Implications) { if (i.Label == "imp1") { Assert.IsTrue(i.Deduction.HasFormula, "imp1: HasFormula"); break; } } } }
public void LoadRules() { // prepare the rule base adapter for reading the rule file string ruleFileFullPath = configurationFolder + Path.DirectorySeparatorChar + RuleFile; if (Logger.IsInferenceEngineVerbose) Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose, 0, "Loading rule file: " + ruleFileFullPath + " of format: " + engineConfiguration.Rules.Format); IRuleBaseAdapter ruleBaseAdapter = null; switch(engineConfiguration.Rules.Format) { case RulesFormat.HRF086: ruleBaseAdapter = new HRF086Adapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.RuleML08Datalog: ruleBaseAdapter = new RuleML08DatalogAdapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.RuleML086Datalog: ruleBaseAdapter = new RuleML086DatalogAdapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.RuleML086NafDatalog: ruleBaseAdapter = new RuleML086NafDatalogAdapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.RuleML09NafDatalog: ruleBaseAdapter = new RuleML09NafDatalogAdapter(ruleFileFullPath, FileAccess.Read); break; case RulesFormat.Visio2003: ruleBaseAdapter = new Visio2003Adapter(ruleFileFullPath, FileAccess.Read); break; } // estimate if a binder is present if (engineConfiguration.Binder != null) { if (engineConfiguration.Binder is CSharpBinderConfiguration) { CSharpBinderConfiguration cSharpBinderConfiguration = (CSharpBinderConfiguration)engineConfiguration.Binder; binderFile = cSharpBinderConfiguration.File; if (Logger.IsInferenceEngineVerbose) Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose, 0, "Using CSharp binder file: " + binderFile); // we load the binder code in a string and then compile it: this method is more reliable than // providing a file path directly using (StreamReader sr = File.OpenText(configurationFolder + Path.DirectorySeparatorChar + binderFile)) { engine.LoadRuleBase(ruleBaseAdapter, CSharpBinderFactory.LoadFromString(cSharpBinderConfiguration.Class, sr.ReadToEnd())); } } else if (engineConfiguration.Binder is VisualBasicBinderConfiguration) { VisualBasicBinderConfiguration visualBasicBinderConfiguration = (VisualBasicBinderConfiguration)engineConfiguration.Binder; binderFile = visualBasicBinderConfiguration.File; if (Logger.IsInferenceEngineVerbose) Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose, 0, "Using Visual Basic binder file: " + binderFile); // we load the binder code in a string and then compile it: this method is more reliable than // providing a file path directly using (StreamReader sr = File.OpenText(configurationFolder + Path.DirectorySeparatorChar + binderFile)) { engine.LoadRuleBase(ruleBaseAdapter, VisualBasicBinderFactory.LoadFromString(visualBasicBinderConfiguration.Class, sr.ReadToEnd())); } } else if (engineConfiguration.Binder is NxBRE.InferenceEngine.Registry.FlowEngineBinderConfiguration) { NxBRE.InferenceEngine.Registry.FlowEngineBinderConfiguration flowEngineBinderConfiguration = (NxBRE.InferenceEngine.Registry.FlowEngineBinderConfiguration)engineConfiguration.Binder; binderFile = flowEngineBinderConfiguration.File; if (Logger.IsInferenceEngineVerbose) Logger.InferenceEngineSource.TraceEvent(TraceEventType.Verbose, 0, "Using FlowEngine binder file: " + binderFile); engine.LoadRuleBase(ruleBaseAdapter, new NxBRE.InferenceEngine.IO.FlowEngineBinder(configurationFolder + Path.DirectorySeparatorChar + binderFile, flowEngineBinderConfiguration.Type)); } else { throw new BREException("Unexpected type of binder object in registry configuration: " + engineConfiguration.Binder.GetType().FullName); } } else { // no binder specified binderFile = null; engine.LoadRuleBase(ruleBaseAdapter); } }