예제 #1
0
        public IEnumerable <string> GetFailingRules(string jsonObject, IEnumerable <string> easyRules)
        {
            var dymeRules        = easyRules.Select(r => _easyRuleDymeRuleSvc.ConvertEasyRuleToDymeRule(r)).ToList();
            var failingDymeRules = dymeRules.Where(r => !_ruleEvaluatorSvc.IsTrueIn(r, jsonObject)).ToList();
            var failingEasyRules = failingDymeRules.Select(r => _easyRuleDymeRuleSvc.ConvertDymeRuleToEasyRule(r)).ToList();

            return(failingEasyRules);
        }
예제 #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);
        }
예제 #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_GivenEasyRules_ExpectDymeRules()
        {
            // Arrange...
            var sut            = new EasyRuleDymeRuleConverter();
            var inputEasyRule  = "IF (Age) IS (18) THEN (Movie) IS (Visible)";
            var expectDymeRule = If.When(ItsAFact.That("Age").Is("18")).Then(ItsAFact.That("Movie").Is("Visible"));
            // Act...
            var result = sut.ConvertEasyRuleToDymeRule(inputEasyRule);

            Assert.AreEqual(expectDymeRule, result);
        }
예제 #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());
        }
예제 #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);
        }
예제 #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);
        }
예제 #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);
        }
예제 #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);
        }
예제 #10
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);
        }