internal static IFact Fact(IFact f, Motor m) { IFact newFact; if (f.GetType().Equals(typeof(IntFact))) { int value = m.AskIntVAlue(f.Question); newFact = new IntFact(f.Name, value, null, 0); } else { bool value = m.AskBoolValue(f.Question); newFact = new BoolFact(f.Name, value, null, 0); } return(newFact); }
internal static IFact Fact(IFact f, Motor m) { IFact newFact; if (f.GetType().Equals(typeof(IntFact))) { // C'est un fait à valeur entière int value = m.AskIntValue(f.Question()); newFact = new IntFact(f.Name(), value, null, 0); } else { // C'est un fait à valeur booléenne bool value = m.AskBoolValue(f.Question()); newFact = new BoolFact(f.Name(), value, null, 0); } return(newFact); }
public void TryGetValueExistingFactTestCase() { var fact = new IntFact(0); GivenCreateContainer() .And("Add fact.", container => container.Add(fact)) .When("Get value.", ct => { bool isFind = ct.TryGetFact(out IntFact result); return(new { isFind, result }); }) .Then("Check result.", result => { Assert.IsTrue(result.isFind, "Fact not found."); Assert.AreEqual(fact, result.result, "Return another fact."); }) .Run(); }
/// <summary> /// Parses an XML Fact element /// </summary> /// <param name="a_fact">XML Fact element</param> /// <returns>Corresponding Fact object or null if parsing is unsuccessful</returns> protected IFact ParseFact(XElement a_fact) { // Variables pour le parsing string name; string valueType; string valueString; bool valueBool = true; int valueInt = 0; string question; // Parsing de la balise <Fact> name = a_fact.Descendants("Name").FirstOrDefault().Value; if (name == null || name == string.Empty) { return(null); } valueType = a_fact.Descendants("Value").FirstOrDefault().Attribute("type").Value; if (valueType.ToLower() != "boolean" && valueType.ToLower() != "integer") { return(null); } valueString = a_fact.Descendants("Value").FirstOrDefault().Value; if (valueString == null || valueString == string.Empty) { return(null); } if (valueType.ToLower() == "boolean") { bool isParsing = bool.TryParse(a_fact.Descendants("Value").FirstOrDefault().Value, out valueBool); if (!isParsing) { return(null); } } else { bool isParsing = int.TryParse(a_fact.Descendants("Value").FirstOrDefault().Value, out valueInt); if (!isParsing) { return(null); } } question = a_fact.Descendants("Question").FirstOrDefault().Value; if (question == null) { return(null); } // Si on arrive ici, la balise <Fact> est conforme IFact newFact; if (question == string.Empty) { question = null; } if (valueType.ToLower() == "boolean") { newFact = new BoolFact(name, valueBool, 0, question); } else { newFact = new IntFact(name, valueInt, 0, question); } return(newFact); }
private List <Rule> CreateTestRulesBase() { List <Rule> rulesBase = new List <Rule>(); List <IFact> currentFactList = new List <IFact>(); IFact currentFact = null; Rule currentRule = null; // R1 currentFact = new IntFact("Ordre", 3, 0, "Quel est l'ordre"); currentFactList.Add(currentFact); currentFact = new BoolFact("Triangle", true, 0, null); currentRule = new Rule("R1", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R2 currentFact = new BoolFact("Triangle", true, 0, null); currentFactList.Add(currentFact); currentFact = new BoolFact("Angle droit", true, 0, "La figure a t'elle au moins un angle droit"); currentFactList.Add(currentFact); currentFact = new BoolFact("Triangle rectangle", true, 0, null); currentRule = new Rule("R2", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R3 currentFact = new BoolFact("Triangle", true, 0, null); currentFactList.Add(currentFact); currentFact = new IntFact("Côtés égaux", 2, 0, "Combien la figure a-t-elle de côtés égaux"); currentFactList.Add(currentFact); currentFact = new BoolFact("Triangle isocèle", true, 0, null); currentRule = new Rule("R3", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R4 currentFact = new BoolFact("Triangle rectangle", true, 0, null); currentFactList.Add(currentFact); currentFact = new BoolFact("Triangle isocèle", true, 0, null); currentFactList.Add(currentFact); currentFact = new BoolFact("Triangle rectangle isocèle", true, 0, null); currentRule = new Rule("R4", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R5 currentFact = new BoolFact("Triangle", true, 0, null); currentFactList.Add(currentFact); currentFact = new IntFact("Côtés égaux", 3, 0, "Combien la figure a-t-elle de côtés égaux"); currentFactList.Add(currentFact); currentFact = new BoolFact("Triangle équilatéral", true, 0, null); currentRule = new Rule("R5", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R6 currentFact = new IntFact("Ordre", 4, 0, "Quel est l'ordre"); currentFactList.Add(currentFact); currentFact = new BoolFact("Quadrilatère", true, 0, null); currentRule = new Rule("R6", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R7 currentFact = new BoolFact("Quadrilatère", true, 0, null); currentFactList.Add(currentFact); currentFact = new IntFact("Côtés parallèles", 2, 0, "Combien y a-t-il de côtés parallèles entre eux"); currentFactList.Add(currentFact); currentFact = new BoolFact("Trapèze", true, 0, null); currentRule = new Rule("R7", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R8 currentFact = new BoolFact("Quadrilatère", true, 0, null); currentFactList.Add(currentFact); currentFact = new IntFact("Côtés parallèles", 4, 0, "Combien y a-t-il de côtés parallèles entre eux"); currentFactList.Add(currentFact); currentFact = new BoolFact("Parallélogramme", true, 0, null); currentRule = new Rule("R8", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R9 currentFact = new BoolFact("Parallélogramme", true, 0, null); currentFactList.Add(currentFact); currentFact = new BoolFact("Angle droit", true, 0, "La figure a t'elle au moins un angle droit"); currentFactList.Add(currentFact); currentFact = new BoolFact("Rectangle", true, 0, null); currentRule = new Rule("R9", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R10 currentFact = new BoolFact("Parallélogramme", true, 0, null); currentFactList.Add(currentFact); currentFact = new IntFact("Côtés égaux", 4, 0, "Combien la figure a-t-elle de côtés égaux"); currentFactList.Add(currentFact); currentFact = new BoolFact("Losange", true, 0, null); currentRule = new Rule("R10", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); // R11 currentFact = new BoolFact("Rectangle", true, 0, null); currentFactList.Add(currentFact); currentFact = new BoolFact("Losange", true, 0, null); currentFactList.Add(currentFact); currentFact = new BoolFact("Carré", true, 0, null); currentRule = new Rule("R11", currentFactList, currentFact); rulesBase.Add(currentRule); currentFactList.Clear(); return(rulesBase); }