TEST(Fuzzy, addFuzzyRule){ Fuzzy* fuzzy = new Fuzzy(); FuzzyRuleAntecedent* seTemperatureLowOrpressureSmall = new FuzzyRuleAntecedent(); FuzzySet* temperatureLow = new FuzzySet(0, 10, 10, 20); temperatureLow->setPertinence(0.5); FuzzySet* pressureSmall = new FuzzySet(0, 10, 10, 20); pressureSmall->setPertinence(0.5); seTemperatureLowOrpressureSmall->joinWithOR(temperatureLow, pressureSmall); FuzzyRuleAntecedent* andRiskMinimum = new FuzzyRuleAntecedent(); FuzzySet* riskMinimum = new FuzzySet(0, 10, 10, 20); riskMinimum->setPertinence(0.7); andRiskMinimum->joinSingle(riskMinimum); FuzzyRuleAntecedent* seTemperatureLowOrpressureSmallandRiskMinimum = new FuzzyRuleAntecedent(); seTemperatureLowOrpressureSmallandRiskMinimum->joinWithAND(seTemperatureLowOrpressureSmall, andRiskMinimum); FuzzyRuleConsequent* thenDangerLow = new FuzzyRuleConsequent(); FuzzySet* dangerLow = new FuzzySet(0, 10, 10, 20); thenDangerLow->addOutput(dangerLow); FuzzyRule* fuzzyRule = new FuzzyRule(1, seTemperatureLowOrpressureSmallandRiskMinimum, thenDangerLow); bool result = fuzzy->addFuzzyRule(fuzzyRule); EXPECT_TRUE(result); }
TEST(FuzzyRule, evaluateExpressionAndIsFired){ FuzzyRuleAntecedent* fuzzyRuleAntecedent2 = new FuzzyRuleAntecedent(); FuzzySet* temperatureLow = new FuzzySet(0, 10, 10, 20); temperatureLow->setPertinence(0.5); FuzzySet* pressureSmall = new FuzzySet(0, 10, 10, 20); pressureSmall->setPertinence(0.5); fuzzyRuleAntecedent2->joinWithOR(temperatureLow, pressureSmall); FuzzyRuleAntecedent* fuzzyRuleAntecedent1 = new FuzzyRuleAntecedent(); FuzzySet* riskMinimum = new FuzzySet(0, 10, 10, 20); riskMinimum->setPertinence(0.7); fuzzyRuleAntecedent1->joinSingle(riskMinimum); FuzzyRuleAntecedent* fuzzyRuleAntecedent3 = new FuzzyRuleAntecedent(); fuzzyRuleAntecedent3->joinWithAND(fuzzyRuleAntecedent2, fuzzyRuleAntecedent1); FuzzyRuleConsequent* fuzzyRuleConsequent = new FuzzyRuleConsequent(); FuzzySet* dangerLow = new FuzzySet(0, 10, 10, 20); fuzzyRuleConsequent->addOutput(dangerLow); FuzzyRule* fuzzyRule = new FuzzyRule(1, fuzzyRuleAntecedent3, fuzzyRuleConsequent); bool result1 = fuzzyRule->evaluateExpression(); bool result2 = fuzzyRule->isFired(); EXPECT_TRUE(result1); EXPECT_TRUE(result2); }
TEST(FuzzySet, setPertinenceAndgetPertinence){ FuzzySet* fuzzySet = new FuzzySet(0, 10, 10, 20); fuzzySet->setPertinence(0.5); float result = fuzzySet->getPertinence(); EXPECT_EQ(result, 0.5); }
TEST(FuzzyRuleAntecedent, evaluate){ FuzzyRuleAntecedent* fuzzyRuleAntecedent1 = new FuzzyRuleAntecedent(); FuzzySet* riskMinimum = new FuzzySet(0, 10, 10, 20); riskMinimum->setPertinence(0.5); fuzzyRuleAntecedent1->joinSingle(riskMinimum); FuzzyRuleAntecedent* fuzzyRuleAntecedent2 = new FuzzyRuleAntecedent(); FuzzySet* temperatureLow = new FuzzySet(0, 10, 10, 20); temperatureLow->setPertinence(0.0); FuzzySet* pressureSmall = new FuzzySet(0, 10, 10, 20); pressureSmall->setPertinence(0.5); fuzzyRuleAntecedent2->joinWithOR(temperatureLow, pressureSmall); FuzzyRuleAntecedent* fuzzyRuleAntecedent3 = new FuzzyRuleAntecedent(); fuzzyRuleAntecedent3->joinWithAND(fuzzyRuleAntecedent1, fuzzyRuleAntecedent2); float result = fuzzyRuleAntecedent3->evaluate(); EXPECT_GT(result, 0.0); }