private JsonEasyRuleEvaluator(IMetricService metricService = null) { _easyRuleDymeRuleSvc = new EasyRuleDymeRuleConverter(); _worldAnalyser = new JsonPathWorldAnalyser(); _worldReader = new JsonPathWorldReader(); _inferenceEngineSvc = new DymeInferenceEvaluator(_worldReader, _worldAnalyser, metricService); _ruleEvaluatorSvc = new DymeRuleEvaluator(_worldReader); }
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); }
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); }
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()); }
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); }
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); }
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); }
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); }
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); }