示例#1
0
        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);
        }
示例#2
0
    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);
    }
示例#3
0
        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();
        }
示例#4
0
        /// <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);
        }
示例#5
0
        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);
        }