Ejemplo n.º 1
0
 private JsonEasyRuleEvaluator(IMetricService metricService = null)
 {
     _easyRuleDymeRuleSvc = new EasyRuleDymeRuleConverter();
     _worldAnalyser       = new JsonPathWorldAnalyser();
     _worldReader         = new JsonPathWorldReader();
     _inferenceEngineSvc  = new DymeInferenceEvaluator(_worldReader, _worldAnalyser, metricService);
     _ruleEvaluatorSvc    = new DymeRuleEvaluator(_worldReader);
 }
Ejemplo n.º 2
0
        public void ConjunctionEquals_Given2EqualConjunctionsCreatedByDifferentMeans_ExpectEqual()
        {
            // Arrange...
            var parser       = new EasyRuleDymeRuleConverter();
            var compareItem1 = parser.ConvertEasyRuleToDymeRule("(sky) IS (blue) AND (weather) IS (sunny)");
            var compareItem2 = All.Of(ItsAFact.That("sky").Is("blue")).And(ItsAFact.That("weather").Is("sunny")).IsTrue();

            // Assert...
            Assert.AreEqual(compareItem1, compareItem2);
        }
Ejemplo n.º 3
0
        public void ImplicationEquals_Given2EqualImplicationsCreatedByDifferentMeans_ExpectEqual()
        {
            // Arrange...
            var parser       = new EasyRuleDymeRuleConverter();
            var compareItem1 = parser.ConvertEasyRuleToDymeRule("IF (sky) IS (blue) THEN (weather) IS (sunny)");
            var compareItem2 = If.When(ItsAFact.That("sky").Is("blue")).Then(ItsAFact.That("weather").Is("sunny"));

            // Assert...
            Assert.AreEqual(compareItem1, compareItem2);
        }
        public void EasyRuleDymeParser_GivenDymeRules_ExpectEasyRules()
        {
            // Arrange...
            var sut            = new EasyRuleDymeRuleConverter();
            var expectEasyRule = "IF (Age) IS (18) THEN (Movie) IS (Visible)";
            var inputDymeRule  = If.When(ItsAFact.That("Age").Is("18")).Then(ItsAFact.That("Movie").Is("Visible"));
            // Act...
            var result = sut.ConvertDymeRuleToEasyRule(inputDymeRule);

            Assert.AreEqual(expectEasyRule, result);
        }
Ejemplo n.º 5
0
        public void ImplicationEquals_GivenEqualImplicationsListDistinctified_Expect1Item()
        {
            // Arrange...
            var parser          = new EasyRuleDymeRuleConverter();
            var compareItemList = new List <IEvaluatable>();

            compareItemList.Add(parser.ConvertEasyRuleToDymeRule("IF (sky) IS (blue) THEN (weather) IS (sunny)"));
            compareItemList.Add(If.When(ItsAFact.That("sky").Is("blue")).Then(ItsAFact.That("weather").Is("sunny")));
            // Act...
            compareItemList = compareItemList.Distinct().ToList();
            // Assert...
            Assert.AreEqual(1, compareItemList.Count());
        }
Ejemplo n.º 6
0
        public void ValidateRulesAgainstWorld_GivenRuleAndworld_ExpectPass(string inputRule, string inputWorld, bool inputResult)
        {
            // Arrange ...
            var  parser          = new EasyRuleDymeRuleConverter();
            var  stateOfTheWorld = GetWorldFromFlatWorld(inputWorld);
            var  evaluatableRule = parser.ConvertEasyRuleToDymeRule(inputRule);
            bool expectedResult  = inputResult;

            // Act ...
            var result = sut.IsTrueIn(evaluatableRule, stateOfTheWorld);

            // Assert ...
            Assert.AreEqual(expectedResult, result);
        }
Ejemplo n.º 7
0
        public void ValidateRulesAgainstWorld_GivenComplexRule2AndWorld_ExpectPass(string inputWorld, bool inputResult)
        {
            // Arrange ...
            var  inputRule       = @"IF ((weather) IS (sunny) AND (wind) IS (mild)) OR ((sky) IS (blue))
                            THEN  (destination) IS (beach)";
            var  parser          = new EasyRuleDymeRuleConverter();
            var  stateOfTheWorld = GetWorldFromFlatWorld(inputWorld);
            var  evaluatableRule = parser.ConvertEasyRuleToDymeRule(inputRule);
            bool expectedResult  = inputResult;

            // Act ...
            var result = sut.IsTrueIn(evaluatableRule, stateOfTheWorld);

            // Assert ...
            Assert.AreEqual(expectedResult, result);
        }
Ejemplo n.º 8
0
        public void ValidateRulesAgainstWorld_GivenRuleAndworld_ExpectPass()
        {
            // Arrange ...
            var parser          = new EasyRuleDymeRuleConverter();
            var stateOfTheWorld = new Dictionary <string, string>();

            stateOfTheWorld.Add("weather", "sunny");
            stateOfTheWorld.Add("destination", "beach");
            var inputRule       = "IF (weather) IS (sunny) THEN (destination) IS (beach)";
            var evaluatableRule = parser.ConvertEasyRuleToDymeRule(inputRule);

            // Act ...
            var result = sut.IsTrueIn(evaluatableRule, stateOfTheWorld);

            // Assert ...
            Assert.AreEqual(true, result);
        }
Ejemplo n.º 9
0
        public void ConjunctionEquals_Given2EqualConjunctionsWith3ArgumentsCreatedByDifferentMeans_ExpectSimilarHashes()
        {
            // Arrange...
            var parser       = new EasyRuleDymeRuleConverter();
            var compareItem1 = parser.ConvertEasyRuleToDymeRule("(sky) IS (blue) AND (weather) IS (sunny) AND (water) IS (warm)");
            var compareItem2 = All.Of(
                ItsAFact.That("sky").Is("blue"))
                               .And(ItsAFact.That("weather").Is("sunny"))
                               .And(ItsAFact.That("water").Is("warm"))
                               .IsTrue();

            // Act...
            var result1 = compareItem1.GetHashCode();
            var result2 = compareItem2.GetHashCode();

            // Assert...
            Assert.AreEqual(result1, result2);
        }
        public void EasyRuleDymeParser_GivenNestedDymeRules_ExpectEasyRules()
        {
            // Arrange...
            var sut            = new EasyRuleDymeRuleConverter();
            var expectEasyRule = "IF (age) GREATER THAN (18) OR ((age) LESS THAN (100) AND (date) PART OF (2000/01/01)) THEN (movie) IS (visible) AND (warnings) CONTAINS (violence)";
            var inputDymeRule  =
                If.When(Any.Of
                            (ItsAFact.That("age").IsGreaterThan("18"))
                        .Or
                            (All.Of(ItsAFact.That("age").IsLessThan("100")).And(ItsAFact.That("date").IsIn("2000/01/01")).IsTrue())
                        .IsTrue())
                .Then(All.Of
                          (ItsAFact.That("movie").Is("visible"))
                      .And
                          (ItsAFact.That("warnings").Contains("violence"))
                      .IsTrue());
            // Act...
            var result = sut.ConvertDymeRuleToEasyRule(inputDymeRule);

            Assert.AreEqual(expectEasyRule, result);
        }
        public void EasyRuleDymeParser_GivenBothJunctiveDymeRules_ExpectEasyRules()
        {
            // Arrange...
            var sut            = new EasyRuleDymeRuleConverter();
            var expectEasyRule = "IF (age) IS (10) OR (genre) IS (cartoon) THEN (movie) IS (visible) AND (there) NOT (violence)";
            var inputDymeRule  =
                If.When(Any.Of
                            (ItsAFact.That("age").Is("10"))
                        .Or
                            (ItsAFact.That("genre").Is("cartoon"))
                        .IsTrue())
                .Then(All.Of
                          (ItsAFact.That("movie").Is("visible"))
                      .And
                          (ItsAFact.That("there").IsNot("violence"))
                      .IsTrue());
            // Act...
            var result = sut.ConvertDymeRuleToEasyRule(inputDymeRule);

            Assert.AreEqual(expectEasyRule, result);
        }
Ejemplo n.º 12
0
        public void MtricSvc_GivenRuleAndworld_ExpectPass()
        {
            // Arrange ...
            var parser          = new EasyRuleDymeRuleConverter();
            var stateOfTheWorld = new Dictionary <string, string>();

            stateOfTheWorld.Add("weather", "sunny");
            stateOfTheWorld.Add("destination", "beach");
            var inputRule       = "IF (weather) IS (sunny) THEN (destination) IS (beach)";
            var evaluatableRule = parser.ConvertEasyRuleToDymeRule(inputRule);
            var expectedResult  = new Dictionary <string, int>();

            expectedResult.Add("EvaluateImplication", 1);
            expectedResult.Add("EvaluateProposition", 2);
            expectedResult.Add("GetValueFromWorld", 2);
            // Act ...
            sut.IsTrueIn(evaluatableRule, stateOfTheWorld);

            var result = (metricSvc as DefaultMetricService).metrics;

            // Assert ...
            CollectionAssert.AreEquivalent(expectedResult, result);
        }