Commit ceb9da31 authored by Falko Schumann's avatar Falko Schumann

Tests vervollständigt

parent 50971350
......@@ -63,7 +63,7 @@ public final class FuzzySet {
public static FuzzySet trapez(String name, double t1, double t2, double t3, double t4) {
if (t1 > t2 || t2 > t3 || t3 > t4) {
throw new IllegalArgumentException("Die vier Trapezecken müssen aufsteigend sortiert angegeben werden: " + t1 + ", " + t2 + ", " + t3 + ", " + t4);
throw new IllegalArgumentException("Die vier Trapezecken müssen monoton aufsteigend sortiert angegeben werden: " + t1 + ", " + t2 + ", " + t3 + ", " + t4);
}
return new FuzzySet(name, t1, t2, t3, t4);
}
......
......@@ -37,7 +37,7 @@ public class FuzzySetTests {
public ExpectedException exception = ExpectedException.none();
@Test
public void konstruktor_Normalfall() {
public void trapez_Normalfall() {
FuzzySet fuzzySet = FuzzySet.trapez("mittel", 25.0, 35.0, 75.0, 85.0);
assertEquals("name", "mittel", fuzzySet.getName());
......@@ -48,7 +48,7 @@ public class FuzzySetTests {
}
@Test
public void konstruktor_NameIstNull_Ausnahmefehler() {
public void trapez_NameIstNull_Ausnahmefehler() {
exception.expect(NullPointerException.class);
exception.expectMessage("name");
......@@ -56,29 +56,139 @@ public class FuzzySetTests {
}
@Test
public void konstruktor_T1ZuGross_Ausnahmefehler() {
public void trapez_T1ZuGross_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Die vier Trapezecken müssen aufsteigend sortiert angegeben werden: 35.1, 35.0, 75.0, 85.0");
exception.expectMessage("Die vier Trapezecken müssen monoton aufsteigend sortiert angegeben werden: 35.1, 35.0, 75.0, 85.0");
FuzzySet.trapez("mittel", 35.1, 35.0, 75.0, 85.0);
}
@Test
public void konstruktor_T2ZuGross_Ausnahmefehler() {
public void trapez_T2ZuGross_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Die vier Trapezecken müssen aufsteigend sortiert angegeben werden: 25.0, 75.1, 75.0, 85.0");
exception.expectMessage("Die vier Trapezecken müssen monoton aufsteigend sortiert angegeben werden: 25.0, 75.1, 75.0, 85.0");
FuzzySet.trapez("mittel", 25.0, 75.1, 75.0, 85.0);
}
@Test
public void konstruktor_T3ZuGross_Ausnahmefehler() {
public void trapez_T3ZuGross_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Die vier Trapezecken müssen aufsteigend sortiert angegeben werden: 25.0, 35.0, 85.1, 85.0");
exception.expectMessage("Die vier Trapezecken müssen monoton aufsteigend sortiert angegeben werden: 25.0, 35.0, 85.1, 85.0");
FuzzySet.trapez("mittel", 25.0, 35.0, 85.1, 85.0);
}
@Test
public void dreieck_Normalfall() {
FuzzySet fuzzySet = FuzzySet.dreieck("mittel", 25.0, 35.0, 75.0);
assertEquals("name", "mittel", fuzzySet.getName());
assertEquals("t1", 25.0, fuzzySet.getT1(), 0.001);
assertEquals("t2", 35.0, fuzzySet.getT2(), 0.001);
assertEquals("t3", 35.0, fuzzySet.getT3(), 0.001);
assertEquals("t4", 75.0, fuzzySet.getT4(), 0.001);
}
@Test
public void strich_Normalfall() {
FuzzySet fuzzySet = FuzzySet.strich("mittel", 25.0);
assertEquals("name", "mittel", fuzzySet.getName());
assertEquals("t1", 25.0, fuzzySet.getT1(), 0.001);
assertEquals("t2", 25.0, fuzzySet.getT2(), 0.001);
assertEquals("t3", 25.0, fuzzySet.getT3(), 0.001);
assertEquals("t4", 25.0, fuzzySet.getT4(), 0.001);
}
@Test
public void aufsteigendeRampe_Normalfall() {
FuzzySet fuzzySet = FuzzySet.aufsteigendeRampe("mittel", 25.0, 35.0, 75.0);
assertEquals("name", "mittel", fuzzySet.getName());
assertEquals("t1", 25.0, fuzzySet.getT1(), 0.001);
assertEquals("t2", 35.0, fuzzySet.getT2(), 0.001);
assertEquals("t3", 75.0, fuzzySet.getT3(), 0.001);
assertEquals("t4", 75.0, fuzzySet.getT4(), 0.001);
}
@Test
public void abfallendeRampe_Normalfall() {
FuzzySet fuzzySet = FuzzySet.abfallendeRampe("mittel", 25.0, 35.0, 75.0);
assertEquals("name", "mittel", fuzzySet.getName());
assertEquals("t1", 25.0, fuzzySet.getT1(), 0.001);
assertEquals("t2", 25.0, fuzzySet.getT2(), 0.001);
assertEquals("t3", 35.0, fuzzySet.getT3(), 0.001);
assertEquals("t4", 75.0, fuzzySet.getT4(), 0.001);
}
@Test
public void rechteck_Normalfall() {
FuzzySet fuzzySet = FuzzySet.rechteck("mittel", 25.0, 75.0);
assertEquals("name", "mittel", fuzzySet.getName());
assertEquals("t1", 25.0, fuzzySet.getT1(), 0.001);
assertEquals("t2", 25.0, fuzzySet.getT2(), 0.001);
assertEquals("t3", 75.0, fuzzySet.getT3(), 0.001);
assertEquals("t4", 75.0, fuzzySet.getT4(), 0.001);
}
@Test
public void trapezMitGleitendenUebergaengen() {
FuzzySet fuzzySet = FuzzySet.trapezMitGleitendenUebergaengen("mittel", 35.0, 75.0);
assertEquals("name", "mittel", fuzzySet.getName());
assertTrue("t1 is NaN", Double.isNaN(fuzzySet.getT1()));
assertEquals("t2", 35.0, fuzzySet.getT2(), 0.001);
assertEquals("t3", 75.0, fuzzySet.getT3(), 0.001);
assertTrue("t4 is NaN", Double.isNaN(fuzzySet.getT4()));
}
@Test
public void trapezMitGleitendenUebergaengen_T2ZuGross_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Gleitende Übergänge: Die beiden Trapezecken müssen monoton aufsteigend sortiert angegeben werden: 75.1, 75.0");
FuzzySet.trapezMitGleitendenUebergaengen("mittel", 75.1, 75.0);
}
@Test
public void runderWertebereich_Normalfall() {
FuzzySet fuzzySet = FuzzySet.runderWertebereich("Nord", 330.0, 359.0, 0.0, 30.0);
assertEquals("name", "Nord", fuzzySet.getName());
assertEquals("t1", 330.0, fuzzySet.getT1(), 0.001);
assertEquals("t2", 359.0, fuzzySet.getT2(), 0.001);
assertEquals("t3", 0.0, fuzzySet.getT3(), 0.001);
assertEquals("t4", 30.0, fuzzySet.getT4(), 0.001);
}
@Test
public void runderWertebereich_T1ZuGross_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Runder Wertebereich: Die ersten beiden und die letzten beiden Trapezecken müssen monoton aufsteigend sortiert angegeben werden, die beiden mittleren Trapezecken müssen dagegen streng monoton fallend angegeben werden: 360.0, 359.0, 0.0, 30.0");
FuzzySet.runderWertebereich("Nord", 360.0, 359.0, 0.0, 30.0);
}
@Test
public void runderWertebereich_T2ZuKlein_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Runder Wertebereich: Die ersten beiden und die letzten beiden Trapezecken müssen monoton aufsteigend sortiert angegeben werden, die beiden mittleren Trapezecken müssen dagegen streng monoton fallend angegeben werden: 330.0, 10.0, 20.0, 30.0");
FuzzySet.runderWertebereich("Nord", 330.0, 10.0, 20.0, 30.0);
}
@Test
public void runderWertebereich_T3ZuGross_Ausnahmefehler() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage("Runder Wertebereich: Die ersten beiden und die letzten beiden Trapezecken müssen monoton aufsteigend sortiert angegeben werden, die beiden mittleren Trapezecken müssen dagegen streng monoton fallend angegeben werden: 330.0, 359.0, 31.0, 30.0");
FuzzySet.runderWertebereich("Nord", 330.0, 359.0, 31.0, 30.0);
}
@Test
public void formattierterText() {
FuzzySet fuzzySet = FuzzySet.trapez("mittel", 25.0, 35.0, 75.0, 85.0);
......
......@@ -114,6 +114,9 @@ public class FuzzyVariableTests {
geschwindigkeit = geschwindigkeit.mitTerm(new Term("niedrig", Zugehoerigkeit.NULL));
assertEquals("Geschwindigkeit: [niedrig: null, mittel: 0.6, hoch: 0.0]", geschwindigkeit.toString());
geschwindigkeit = geschwindigkeit.mitTerm(new Term("sehr hoch", Zugehoerigkeit.of(0.5)));
assertEquals("Geschwindigkeit: [niedrig: null, mittel: 0.6, hoch: 0.0, sehr hoch: 0.5]", geschwindigkeit.toString());
}
private FuzzyVariable erzeugeFuzzyVariable() {
......
......@@ -45,6 +45,16 @@ public class LinguistischeVariableTests {
assertEquals("name", "Geschwindigkeit", geschwindigkeit.getName());
assertEquals("wertebereich", erzeugeWertebereich(), geschwindigkeit.getWertebereich());
assertEquals("fuzzySets", erzeugeFuzzySets(), geschwindigkeit.getFuzzySets());
assertTrue("non null", geschwindigkeit.nonNull());
assertFalse("is null", geschwindigkeit.isNull());
}
@Test
public void konstruktor_null() {
LinguistischeVariable geschwindigkeit = new LinguistischeVariable("VKfz");
assertFalse("non null", geschwindigkeit.nonNull());
assertTrue("is null", geschwindigkeit.isNull());
}
@Test
......@@ -64,7 +74,7 @@ public class LinguistischeVariableTests {
}
@Test
public void konstruktor_TermeIstNull_Ausnahmefehler() {
public void konstruktor_FuzzySetsIstNull_Ausnahmefehler() {
exception.expect(NullPointerException.class);
exception.expectMessage("fuzzySets");
......@@ -107,7 +117,22 @@ public class LinguistischeVariableTests {
}
@Test
public void fuzzyfiziere() {
public void erzeugeFuzzyVariable() {
LinguistischeVariable linguistischeVariable = erzeugeLinguistischeVariable();
FuzzyVariable fuzzyVariable = linguistischeVariable.erzeugeFuzzyVariable();
assertEquals(
new FuzzyVariable("Geschwindigkeit",
new Term("niedrig", Zugehoerigkeit.NULL),
new Term("mittel", Zugehoerigkeit.NULL),
new Term("hoch", Zugehoerigkeit.NULL)
),
fuzzyVariable);
}
@Test
public void fuzzyfiziere_MesswertInUebergang() {
LinguistischeVariable linguistischeVariable = erzeugeLinguistischeVariable();
FuzzyVariable fuzzyVariable = linguistischeVariable.fuzzyfiziere(30.0);
......@@ -121,6 +146,45 @@ public class LinguistischeVariableTests {
fuzzyVariable);
}
@Test
public void fuzzyfiziere_MesswertImMaximum() {
LinguistischeVariable linguistischeVariable = erzeugeLinguistischeVariable();
FuzzyVariable fuzzyVariable = linguistischeVariable.fuzzyfiziere(40.0);
assertEquals(
new FuzzyVariable("Geschwindigkeit",
new Term("niedrig", Zugehoerigkeit.of(0.0)),
new Term("mittel", Zugehoerigkeit.of(1.0)),
new Term("hoch", Zugehoerigkeit.of(0.0))
),
fuzzyVariable);
}
@Test
public void fuzzyfiziere_FuzzySetsMitGleichenNamen() {
LinguistischeVariable linguistischeVariable = new LinguistischeVariable(
"Windrichtung",
erzeugeWertebereich(),
FuzzySet.trapez("Nord", 0.0, 0.0, 35.0, 55.0),
FuzzySet.trapez("Ost", 35.0, 55.0, 125.0, 145.0),
FuzzySet.trapez("Süd", 125.0, 145.0, 215.0, 235.0),
FuzzySet.trapez("West", 215.0, 235.0, 305.0, 325.0),
FuzzySet.trapez("Nord", 305.0, 325.0, 359.0, 359.0)
);
FuzzyVariable fuzzyVariable = linguistischeVariable.fuzzyfiziere(30.0);
assertEquals(
new FuzzyVariable("Windrichtung",
new Term("Nord", Zugehoerigkeit.of(1.0)),
new Term("Ost", Zugehoerigkeit.of(0.0)),
new Term("Süd", Zugehoerigkeit.of(0.0)),
new Term("West", Zugehoerigkeit.of(0.0))
),
fuzzyVariable);
}
@Test
@Ignore("Defuzzyfizierung noch nicht implementiert")
public void defuzzyfiziere_Normalfall() {
......@@ -173,10 +237,13 @@ public class LinguistischeVariableTests {
public void formattierterText() {
LinguistischeVariable geschwindigkeit = erzeugeLinguistischeVariable();
assertEquals(
"Geschwindigkeit (0.0-254.0): [niedrig: [0.0, 0.0, 25.0, 35.0], mittel: [25.0, 35.0, 75.0, 85.0], hoch: [75.0, 85.0, 254.0, 254.0]]",
geschwindigkeit.toString()
);
assertEquals("Geschwindigkeit (0.0-254.0): [niedrig: [0.0, 0.0, 25.0, 35.0], mittel: [25.0, 35.0, 75.0, 85.0], hoch: [75.0, 85.0, 254.0, 254.0]]", geschwindigkeit.toString());
geschwindigkeit = geschwindigkeit.mitFuzzySet(FuzzySet.trapez("niedrig", 0.0, 10.0, 20.0, 30.0));
assertEquals("Geschwindigkeit (0.0-254.0): [niedrig: [0.0, 10.0, 20.0, 30.0], mittel: [25.0, 35.0, 75.0, 85.0], hoch: [75.0, 85.0, 254.0, 254.0]]", geschwindigkeit.toString());
geschwindigkeit = geschwindigkeit.mitFuzzySet(FuzzySet.trapez("sehr niedrig", 0.0, 0.0, 10.0, 20.0));
assertEquals("Geschwindigkeit (0.0-254.0): [niedrig: [0.0, 10.0, 20.0, 30.0], mittel: [25.0, 35.0, 75.0, 85.0], hoch: [75.0, 85.0, 254.0, 254.0], sehr niedrig: [0.0, 0.0, 10.0, 20.0]]", geschwindigkeit.toString());
}
private LinguistischeVariable erzeugeLinguistischeVariable() {
......
......@@ -38,6 +38,11 @@ public class RegelbasisTests {
private Regelbasis regelbasis;
@BeforeClass
public static void registerHandler() {
Operator.registerHandler(new FuzzyLogikHandler());
}
@Before
public void setUp() {
regelbasis = new Regelbasis(
......@@ -77,6 +82,19 @@ public class RegelbasisTests {
);
}
@Test
public void konstruktor_Null() {
Regelbasis regelbasis = new Regelbasis(
Regel.wenn(new DoubleLiteral(1.0)).dann(new TermVariable("Foo", "bar")).erzeuge()
);
assertFalse(regelbasis.isNull());
assertTrue(regelbasis.nonNull());
regelbasis = new Regelbasis();
assertTrue(regelbasis.isNull());
assertFalse(regelbasis.nonNull());
}
@Test
public void werteRegelnAus() {
FuzzyVariable kb = new FuzzyVariable("KB", Arrays.asList(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment