internal void Evaluate_ValidRuleAndConditions_ReturnsExpectedFuzzyOutput() { // Arrange var waterTemp = StubLinguisticVariableFactory.WaterTemp(); var fanSpeed = StubLinguisticVariableFactory.PumpSpeed(); var fuzzyRule = new FuzzyRuleBuilder(PumpSpeedRule.Rule0) .If(ConditionBuilder.If(waterTemp.Is(WaterTemp.Frozen))) .Or(ConditionBuilder.If(waterTemp.Is(WaterTemp.Freezing))) .Then(fanSpeed.Is(PumpSpeed.Off)) .Build(); var dataPoint = new DataPoint(waterTemp.Subject, 0); var data = new Dictionary <Label, DataPoint> { { dataPoint.Variable, dataPoint } }; // Act var result = fuzzyRule.Evaluate(data, new FuzzyEvaluator()); // Assert Assert.Equal(fanSpeed.Subject, result[0].Subject); Assert.Equal(fanSpeed.GetState(0), result[0].State); Assert.Equal(UnitInterval.One(), result[0].FiringStrength); Assert.Equal(fanSpeed.GetSet(PumpSpeed.Off), result[0].OutputFunction); }
internal void Validate_WhenFirstConditionConnectiveNotIf_Throws() { // Arrange var waterTemp = StubLinguisticVariableFactory.WaterTemp(); var fanSpeed = StubLinguisticVariableFactory.PumpSpeed(); var fuzzyRule = new FuzzyRuleBuilder("Rule0") .And(ConditionBuilder.If(waterTemp.Is(WaterTemp.Frozen))) .Then(fanSpeed.Is(PumpSpeed.Off)); // Act // Assert var ex = Assert.Throws <InvalidOperationException>(() => fuzzyRule.Build()); this.output.WriteLine(ex.Message); }
internal void Build_WhenConditionsAndConclusionsAreValid_ReturnsExpectedRuzzyRule() { // Arrange var waterTemp = StubLinguisticVariableFactory.WaterTemp(); var pumpSpeed = StubLinguisticVariableFactory.PumpSpeed(); // Act var fuzzyRule = new FuzzyRuleBuilder(PumpSpeedRule.Rule0) .If(waterTemp.Is(WaterTemp.Warm)) .And(waterTemp.Not(WaterTemp.Frozen)) .Then(pumpSpeed.Is(PumpSpeed.Moderate)) .Build(); // Assert Assert.Equal(Label.Create(PumpSpeedRule.Rule0), fuzzyRule.Label); Assert.Equal(2, fuzzyRule.Conditions.Count); Assert.Equal(1, fuzzyRule.Conclusions.Count); }