public void Visio2003ImplicationProperties_2_1() { int totalTest = 0; using (Visio2003Adapter va = new Visio2003Adapter(ruleFilesFolder + "test-2_1.vdx", FileAccess.Read)) { 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: Asserting"); totalTest++; } 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(ImplicationAction.Assert, i.Action, "imp2: Asserting"); totalTest++; } } } Assert.AreEqual(2, totalTest, "totalTest"); }
public void Visio2003PageNames() { IList <string> pageNames = Visio2003Adapter.GetPageNames(ruleFilesFolder + "discount.vdx"); Assert.AreEqual(5, pageNames.Count, "Page count"); string expectedResult = "|Customer Data|Customer Rules|Discount Rules|Product Data|Queries|"; foreach (string pageName in pageNames) { Assert.IsTrue(expectedResult.Contains("|" + pageName + "|"), pageName + " found"); } }
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 Visio2003ImplicationProperties_2_3() { int totalTest = 0; using (Visio2003Adapter va = new Visio2003Adapter(ruleFilesFolder + "test-2_3.vdx", FileAccess.Read)) { 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: Asserting"); Assert.IsTrue(i.Deduction.HasFormula, "imp1: HasFormula"); } 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(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(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(ImplicationAction.Modify, i.Action, "imp4: Modify"); } totalTest++; } } Assert.AreEqual(5, totalTest, "totalTest"); }
public void Visio2003PageNames() { string[] pageNames = Visio2003Adapter.GetPageNames(ruleFilesFolder + "discount.vdx"); Assert.AreEqual(5, pageNames.Length, "Page count"); Array.Sort(pageNames); string expectedResult = "|Customer Data|Customer Rules|Discount Rules|Product Data|Queries|"; string actualResult = "|"; foreach (string pageName in pageNames) { actualResult += (pageName + "|"); } Assert.AreEqual(expectedResult, actualResult, "Page names"); }
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 LoadRuleBase(MainForm mf, string uri, bool onlyFacts) { IBinder binder = null; // give priority to custom compiled binders if (File.Exists(uri + ".ccb")) { up.lastBinderClassName = mf.PromptForString("C# Custom Binder - " + uri + ".ccb", "Enter the fully qualified name of the binder class:", up.lastBinderClassName); binder = CSharpBinderFactory.LoadFromFile(up.lastBinderClassName, uri + ".ccb"); } else if (File.Exists(uri + ".vcb")) { up.lastBinderClassName = mf.PromptForString("VB.NET Custom Binder - " + uri + ".vcb", "Enter the fully qualified name of the binder class:", up.lastBinderClassName); binder = VisualBasicBinderFactory.LoadFromFile(up.lastBinderClassName, uri + ".vcb"); } else if (File.Exists(uri + ".xbre")) { bool isBeforeAfter = mf.AskYesNoQuestion("Flow Engine Binder - " + uri + ".xbre", uri + ".xbre\n\nIs this binder running in Before/After mode ?\n\n(No would mean that it runs in Control Process mode)"); binder = new FlowEngineBinder(uri + ".xbre", isBeforeAfter?BindingTypes.BeforeAfter:BindingTypes.Control); } if (!onlyFacts) { ie = new IEImpl(binder); } switch (Path.GetExtension(uri).ToLower()) { case ".ruleml": try { if (onlyFacts) { ie.LoadFacts(new RuleML09NafDatalogAdapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new RuleML09NafDatalogAdapter(uri, FileAccess.Read)); } } catch (Exception firstAttemptException) { try { if (onlyFacts) { ie.LoadFacts(new RuleML086NafDatalogAdapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new RuleML086NafDatalogAdapter(uri, FileAccess.Read)); } } catch (Exception) { try { if (onlyFacts) { ie.LoadFacts(new RuleML086DatalogAdapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new RuleML086DatalogAdapter(uri, FileAccess.Read)); } } catch (Exception) { try { if (onlyFacts) { ie.LoadFacts(new RuleML08DatalogAdapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new RuleML08DatalogAdapter(uri, FileAccess.Read)); } } catch (Exception) { // the fall-back policy failed, hence throw the original exception throw firstAttemptException; } } } } break; case ".hrf": if (onlyFacts) { ie.LoadFacts(new HRF086Adapter(uri, FileAccess.Read)); } else { ie.LoadRuleBase(new HRF086Adapter(uri, FileAccess.Read)); } break; case ".vdx": string[] selectedPages = mf.PromptForVisioPageNameSelection(Visio2003Adapter.GetPageNames(uri)); if (selectedPages != null) { if (onlyFacts) { ie.LoadFacts(new Visio2003Adapter(uri, FileAccess.Read, selectedPages)); } else { ie.LoadRuleBase(new Visio2003Adapter(uri, FileAccess.Read, (DialogResult.Yes == MessageBox.Show(mf, "Is your Visio rule base using strict syntax?", "Visio strictness", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2)), selectedPages)); } } break; default: throw new Exception(Path.GetExtension(uri) + " is an unknown extension."); } }
public void LoadRules() { // prepare the rule base adapter for reading the rule file var 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; default: throw new ArgumentOutOfRangeException(); } // estimate if a binder is present if (engineConfiguration.Binder != null) { var binder = engineConfiguration.Binder as CSharpBinderConfiguration; if (binder != null) { var cSharpBinderConfiguration = 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 (var sr = File.OpenText(configurationFolder + Path.DirectorySeparatorChar + binderFile)) { engine.LoadRuleBase(ruleBaseAdapter, CSharpBinderFactory.LoadFromString(cSharpBinderConfiguration.Class, sr.ReadToEnd())); } } else if (engineConfiguration.Binder is VisualBasicBinderConfiguration) { var 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 FlowEngineBinderConfiguration) { FlowEngineBinderConfiguration flowEngineBinderConfiguration = (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); } }