diff --git a/.gitignore b/.gitignore index a71113a..0e092bf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -Java 2.iml -java2.iml +Java 2.iml +java2.iml target \ No newline at end of file diff --git a/README.md b/README.md index 737c26e..06a529f 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 71835cf..f2f2be0 100644 --- a/pom.xml +++ b/pom.xml @@ -1,59 +1,59 @@ - - - 4.0.0 - - Java 2 - - de.joethei.hs - java2 - 1.0-SNAPSHOT - - - UTF-8 - - - - - - maven-compiler-plugin - 3.7.0 - - 1.8 - 1.8 - - - - maven-surefire-plugin - 2.19.1 - - de.joethei.hs.java2.tests.* - - - - org.junit.platform - junit-platform-surefire-provider - 1.0.1 - - - - - - - - - junit - junit - 4.12 - test - - - org.junit.vintage - junit-vintage-engine - 4.12.1 - test - - - + + + 4.0.0 + + Java 2 + + de.joethei.hs + java2 + 1.0-SNAPSHOT + + + UTF-8 + + + + + + maven-compiler-plugin + 3.7.0 + + 1.8 + 1.8 + + + + maven-surefire-plugin + 2.19.1 + + de.joethei.hs.java2.tests.* + + + + org.junit.platform + junit-platform-surefire-provider + 1.0.1 + + + + + + + + + junit + junit + 4.12 + test + + + org.junit.vintage + junit-vintage-engine + 4.12.1 + test + + + \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum1/GrosseZahl.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum1/GrosseZahl.java index 9a3efab..0e585fb 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum1/GrosseZahl.java +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum1/GrosseZahl.java @@ -1,159 +1,159 @@ -package de.joethei.hs.java2.praktikum.praktikum1; - -public class GrosseZahl { - - private int zahl[]; - - public GrosseZahl(String d) { - Boolean korrekteEingabe=true; - for(int i=0; i '9') { - korrekteEingabe = false; - } - } - if(korrekteEingabe) { - zahl = new int[d.length()]; - for(int w=0; w b.zahl.length) return false; - for(int i = 0; i b.zahl[i]) return false; - if(this.zahl[i] < b.zahl[i]) return true; - } - return false; - } - - public GrosseZahl add(GrosseZahl b) { - int uebertrag = 0; - GrosseZahl rueckgabe, operand; - if(this.less(b)) { - rueckgabe = new GrosseZahl(b.toString()); - operand = new GrosseZahl(this.toString()); - } else { - rueckgabe = new GrosseZahl(this.toString()); - operand = new GrosseZahl(b.toString()); - } - for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) { - rueckgabe.zahl[i] += uebertrag; - uebertrag = 0; - if(w>=0) { - rueckgabe.zahl[i] += operand.zahl[w]; - } - if(rueckgabe.zahl[i] > 9) { - rueckgabe.zahl[i] -= 10; - uebertrag = 1; - } - if(i==0 && uebertrag==1) { - return new GrosseZahl("1"+rueckgabe.toString()); - } - } - return rueckgabe; - } - - public GrosseZahl sub(GrosseZahl b) { - int uebertrag = 0; - StringBuilder x; - if(this.equals(b)) { - return new GrosseZahl(0); - } else if(this.less(b)) { - return new GrosseZahl(0); - } - GrosseZahl rueckgabe = new GrosseZahl(this.toString()); - GrosseZahl operand = new GrosseZahl(b.toString()); - for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) { - if(w>=0) { - rueckgabe.zahl[i] -= operand.zahl[w]; - } - rueckgabe.zahl[i] -= uebertrag; - uebertrag = 0; - if(rueckgabe.zahl[i] < 0) { - rueckgabe.zahl[i] += 10; - uebertrag += 1; - } - } - while(rueckgabe.zahl[0] == 0) { - x = new StringBuilder(); - for(int i = 1; i= 0; i--) { - if(tmp.zahl[i] != this.zahl[i]) return false; - } - return true; - }else return false; - } - return false; - } - -} +package de.joethei.hs.java2.praktikum.praktikum1; + +public class GrosseZahl { + + private int zahl[]; + + public GrosseZahl(String d) { + Boolean korrekteEingabe=true; + for(int i=0; i '9') { + korrekteEingabe = false; + } + } + if(korrekteEingabe) { + zahl = new int[d.length()]; + for(int w=0; w b.zahl.length) return false; + for(int i = 0; i b.zahl[i]) return false; + if(this.zahl[i] < b.zahl[i]) return true; + } + return false; + } + + public GrosseZahl add(GrosseZahl b) { + int uebertrag = 0; + GrosseZahl rueckgabe, operand; + if(this.less(b)) { + rueckgabe = new GrosseZahl(b.toString()); + operand = new GrosseZahl(this.toString()); + } else { + rueckgabe = new GrosseZahl(this.toString()); + operand = new GrosseZahl(b.toString()); + } + for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) { + rueckgabe.zahl[i] += uebertrag; + uebertrag = 0; + if(w>=0) { + rueckgabe.zahl[i] += operand.zahl[w]; + } + if(rueckgabe.zahl[i] > 9) { + rueckgabe.zahl[i] -= 10; + uebertrag = 1; + } + if(i==0 && uebertrag==1) { + return new GrosseZahl("1"+rueckgabe.toString()); + } + } + return rueckgabe; + } + + public GrosseZahl sub(GrosseZahl b) { + int uebertrag = 0; + StringBuilder x; + if(this.equals(b)) { + return new GrosseZahl(0); + } else if(this.less(b)) { + return new GrosseZahl(0); + } + GrosseZahl rueckgabe = new GrosseZahl(this.toString()); + GrosseZahl operand = new GrosseZahl(b.toString()); + for(int i = (rueckgabe.zahl.length-1), w = (operand.zahl.length-1); i>=0; i--, w--) { + if(w>=0) { + rueckgabe.zahl[i] -= operand.zahl[w]; + } + rueckgabe.zahl[i] -= uebertrag; + uebertrag = 0; + if(rueckgabe.zahl[i] < 0) { + rueckgabe.zahl[i] += 10; + uebertrag += 1; + } + } + while(rueckgabe.zahl[0] == 0) { + x = new StringBuilder(); + for(int i = 1; i= 0; i--) { + if(tmp.zahl[i] != this.zahl[i]) return false; + } + return true; + }else return false; + } + return false; + } + +} diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum1/aufgabe.txt b/src/main/java/de/joethei/hs/java2/praktikum/praktikum1/aufgabe.txt index 53f7e5c..c55d604 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum1/aufgabe.txt +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum1/aufgabe.txt @@ -1,19 +1,19 @@ -Entwickeln Sie eine Klasse GrosseZahl, die ganze Zahlen >=0 repräsentiert. Negative Zahlen werden zur Vereinfachung nicht berücksichtigt. Die Klasse ist nicht durch den Wertebereich primitiver Typen begrenzt, sondern speichert ein Feld (int-Array, keine ArrayList!) mit den Dezimalziffern einer Zahl. -Definieren Sie folgende Methoden: - - GrosseZahl(String d) - Erzeugt eine Zahl, deren Dezimaldarstellung in d gegeben ist. d besteht ausschließlich aus Dezimalziffern. - GrosseZahl(int i) - Erzeugt eine Zahl mit dem Wert von i. - String toString() - Gibt die Zahl als String zurück. - boolean less(GrosseZahl b) - Liefert true, wenn diese Zahl echt kleiner als b ist. - GrosseZahl add(GrosseZahl b) - Liefert eine neue Zahl mit der Summe dieser Zahl und b. Das this-Objekt wird nicht verändert. - GrosseZahl mult(GrosseZahl b) - Liefert eine neue Zahl mit dem Produkt dieser Zahl und b. Das this-Objekt wird nicht verändert. Hinweis: Sie können dazu die add-Methode nutzen! - GrosseZahl ggT(GrosseZahl b) - Liefert den größten gemeinsamen Teiler (ggt) dieser Zahl und b zurück. Das this-Objekt wird nicht verändert. Die Berechnung muss rekursiv(!) nach dem klassischen euklidischen Algorithmus erfolgen. Nach diesem wird immer die kleinere Zahl von der größeren Zahl abgezogen, bis beide Zahlen gleich groß sind. Dieses Ergebnis ist dann der ggT. - +Entwickeln Sie eine Klasse GrosseZahl, die ganze Zahlen >=0 repräsentiert. Negative Zahlen werden zur Vereinfachung nicht berücksichtigt. Die Klasse ist nicht durch den Wertebereich primitiver Typen begrenzt, sondern speichert ein Feld (int-Array, keine ArrayList!) mit den Dezimalziffern einer Zahl. +Definieren Sie folgende Methoden: + + GrosseZahl(String d) + Erzeugt eine Zahl, deren Dezimaldarstellung in d gegeben ist. d besteht ausschließlich aus Dezimalziffern. + GrosseZahl(int i) + Erzeugt eine Zahl mit dem Wert von i. + String toString() + Gibt die Zahl als String zurück. + boolean less(GrosseZahl b) + Liefert true, wenn diese Zahl echt kleiner als b ist. + GrosseZahl add(GrosseZahl b) + Liefert eine neue Zahl mit der Summe dieser Zahl und b. Das this-Objekt wird nicht verändert. + GrosseZahl mult(GrosseZahl b) + Liefert eine neue Zahl mit dem Produkt dieser Zahl und b. Das this-Objekt wird nicht verändert. Hinweis: Sie können dazu die add-Methode nutzen! + GrosseZahl ggT(GrosseZahl b) + Liefert den größten gemeinsamen Teiler (ggt) dieser Zahl und b zurück. Das this-Objekt wird nicht verändert. Die Berechnung muss rekursiv(!) nach dem klassischen euklidischen Algorithmus erfolgen. Nach diesem wird immer die kleinere Zahl von der größeren Zahl abgezogen, bis beide Zahlen gleich groß sind. Dieses Ergebnis ist dann der ggT. + Die Verwendung der Klasse BigInteger aus der Java-Bibliothek ist für diese Aufgabe nicht erlaubt! Sie dürfen und sollten aber eigene Hilfsmethoden (private) hinzufügen, um sich die Lösung der Aufgaben zu erleichtern. \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum2/CharCollection.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum2/CharCollection.java index af6a951..cfc1c03 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum2/CharCollection.java +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum2/CharCollection.java @@ -1,107 +1,107 @@ -package de.joethei.hs.java2.praktikum.praktikum2; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class CharCollection implements Cloneable{ - - private List list = new ArrayList<>(); - - public CharCollection(char... cc) { - for(char c:cc) this.list.add(c); - } - - public CharCollection(String s) { - for(char c : s.toCharArray()) { - this.list.add(c); - } - } - - public int size() { - return this.list.size(); - } - - public int count(char c) { - int result = 0; - for(char b:list) { - if(b == c)result ++; - } - return result; - } - - public int different() { - Set set = new HashSet<>(list); - return set.size(); - } - - public char top() { - if(list.isEmpty()) return 0; - int max = 0; - char character ='_'; - for(char c : list) { - int count = count(c); - if(count >= max) { - character = c; - max = count; - } - } - return character; - } - - public CharCollection moreThan(int m) { - ArrayList list2 = new ArrayList<>(); - for(char c:this.list){ - if(this.count(c) > m) { - list2.add(c); - } - } - StringBuilder s = new StringBuilder(); - for(char c:list2) s.append(c); - return new CharCollection(s.toString()); - } - - public CharCollection except(CharCollection cc) { - ArrayList list= new ArrayList<>(this.list); - boolean removeCharacterOnce = false; - for(int i=0; i list = new ArrayList<>(this.list); - for(char c:cc.list) { - if(!list.contains(c)) return false; - else list.remove(list.indexOf(c)); - } - return true; - } - - @Override - public String toString() { - return list.toString().replace('[', '(').replace(']', ')'); - } - - @Override - public boolean equals(Object o) { - if(o instanceof CharCollection) { - CharCollection c = (CharCollection) o; - if(this.size() != c.size()) return false; - return this.isSubset(c); - }return false; - } - +package de.joethei.hs.java2.praktikum.praktikum2; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class CharCollection implements Cloneable{ + + private List list = new ArrayList<>(); + + public CharCollection(char... cc) { + for(char c:cc) this.list.add(c); + } + + public CharCollection(String s) { + for(char c : s.toCharArray()) { + this.list.add(c); + } + } + + public int size() { + return this.list.size(); + } + + public int count(char c) { + int result = 0; + for(char b:list) { + if(b == c)result ++; + } + return result; + } + + public int different() { + Set set = new HashSet<>(list); + return set.size(); + } + + public char top() { + if(list.isEmpty()) return 0; + int max = 0; + char character ='_'; + for(char c : list) { + int count = count(c); + if(count >= max) { + character = c; + max = count; + } + } + return character; + } + + public CharCollection moreThan(int m) { + ArrayList list2 = new ArrayList<>(); + for(char c:this.list){ + if(this.count(c) > m) { + list2.add(c); + } + } + StringBuilder s = new StringBuilder(); + for(char c:list2) s.append(c); + return new CharCollection(s.toString()); + } + + public CharCollection except(CharCollection cc) { + ArrayList list= new ArrayList<>(this.list); + boolean removeCharacterOnce = false; + for(int i=0; i list = new ArrayList<>(this.list); + for(char c:cc.list) { + if(!list.contains(c)) return false; + else list.remove(list.indexOf(c)); + } + return true; + } + + @Override + public String toString() { + return list.toString().replace('[', '(').replace(']', ')'); + } + + @Override + public boolean equals(Object o) { + if(o instanceof CharCollection) { + CharCollection c = (CharCollection) o; + if(this.size() != c.size()) return false; + return this.isSubset(c); + }return false; + } + } \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum2/aufgabe.txt b/src/main/java/de/joethei/hs/java2/praktikum/praktikum2/aufgabe.txt index 5914e4c..5a4c8e0 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum2/aufgabe.txt +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum2/aufgabe.txt @@ -1,41 +1,41 @@ -Als Buchstabensammlung wird hier eine beliebig große, unveränderliche Sammlung von großen Buchstaben bezeichnet. In einer Sammlung können einzelne Buchstaben fehlen oder mehrfach enthalten sein. Die Reihenfolge ist irrelevant. Eine Sammlung ist zum Beispiel: -(A, B, R, A, K, A, D, A, B, R, A) -Definieren Sie auf der Grundlage einer ArrayList eine Klasse CharCollection, deren Elemente Sammlungen repräsentieren. CharCollection bietet folgende Funktionalität: - - CharCollection(char... cc) - Erzeugt eine neue Sammlung aus einer Liste großer Buchstaben. Eine Sammlung wird zum Beispiel erzeugt mit: - CharCollection cc = new CharCollection('A', 'B', 'R', 'A', 'K', 'A', 'D', 'A', 'B', 'R', 'A'); - CharCollection(String s) - Erzeugt eine neue Sammlung aus den Buchstaben eines Strings aus großen Buchstaben. Die gleiche Sammlung wie im vorhergehenden Punkt wird zum Beispiel erzeugt mit: - CharCollection cc = new CharCollection("ABRAKADABRA"); - int size() - Liefert die Anzahl Buchstaben der Sammlung. Zum Beispiel: - System.out.println(cc.size()); // 11 - int count(char c) - Liefert die Anzahl Vorkommen des Buchstabens c. Beispiele: - System.out.println(cc.count('R')); // 2 - System.out.println(cc.count('X')); // 0 - int different() - Liefert die Anzahl verschiedener Buchstaben in der Sammlung. Zum Beispiel: - System.out.println(cc.different()); // 5 - char top() - Liefert den häufigsten Buchstaben in der Sammlung. Wenn es mehrere Kandidaten gibt, wird irgendeiner davon gewählt. Ein Beispiel: - System.out.println(cc.top()); // A - Eine leere Sammlung liefert das Zeichen mit dem Zeichencode 0zurück. - public String toString() - Liefert eine lesbare Darstellung der Sammlung. - System.out.println(cc); // (A, B, R, A, K, A, D, A, B, R, A) - Die Reihenfolge der Elemente ist irrelevant. - CharCollection moreThan(int m) - Liefert eine neue Sammlung, in der nur noch die Buchstaben enthalten sind, die mehr als m-mal vorkommen. Beispiel: Nur Buchstaben, die wenigstens 2-mal vorkommen, bleiben übrig. K und D fallen heraus: - System.out.println(cc.moreThan(1)); // (A, B, R, A, A, A, B, R, A) - public boolean equals(Object x) - Vergleicht eine Sammlung mit einem anderen Objekt x. Liefert true, wenn x eine Sammlung mit den gleichen Buchstaben ist, und ansonsten false. Die Reihenfolge spielt keine Rolle. - CharCollection except(CharCollection cc) - Liefert eine neue Sammlung aus den Buchstaben dieser Sammlung, wobei alle Buchstaben von cc entfernt sind. Beispiel: - System.out.println(cc.except(new CharCollection("ABRAXAS"))); // (K, D, A, B, R, A) - boolean isSubset(CharCollection cc) - Liefert zurück, ob die als Parameter übergebene Sammlung in der Sammlung enthalten ist, für die die Methode aufgerufen wurde (this). Beispiel: - System.out.println(cc.isSubset(new CharCollection("ABRAAA"))); // true - -Ihre Lösung muss intern als Objektvariable eine List zur Speicherung der Buchstabensammlung verwenden! +Als Buchstabensammlung wird hier eine beliebig große, unveränderliche Sammlung von großen Buchstaben bezeichnet. In einer Sammlung können einzelne Buchstaben fehlen oder mehrfach enthalten sein. Die Reihenfolge ist irrelevant. Eine Sammlung ist zum Beispiel: +(A, B, R, A, K, A, D, A, B, R, A) +Definieren Sie auf der Grundlage einer ArrayList eine Klasse CharCollection, deren Elemente Sammlungen repräsentieren. CharCollection bietet folgende Funktionalität: + + CharCollection(char... cc) + Erzeugt eine neue Sammlung aus einer Liste großer Buchstaben. Eine Sammlung wird zum Beispiel erzeugt mit: + CharCollection cc = new CharCollection('A', 'B', 'R', 'A', 'K', 'A', 'D', 'A', 'B', 'R', 'A'); + CharCollection(String s) + Erzeugt eine neue Sammlung aus den Buchstaben eines Strings aus großen Buchstaben. Die gleiche Sammlung wie im vorhergehenden Punkt wird zum Beispiel erzeugt mit: + CharCollection cc = new CharCollection("ABRAKADABRA"); + int size() + Liefert die Anzahl Buchstaben der Sammlung. Zum Beispiel: + System.out.println(cc.size()); // 11 + int count(char c) + Liefert die Anzahl Vorkommen des Buchstabens c. Beispiele: + System.out.println(cc.count('R')); // 2 + System.out.println(cc.count('X')); // 0 + int different() + Liefert die Anzahl verschiedener Buchstaben in der Sammlung. Zum Beispiel: + System.out.println(cc.different()); // 5 + char top() + Liefert den häufigsten Buchstaben in der Sammlung. Wenn es mehrere Kandidaten gibt, wird irgendeiner davon gewählt. Ein Beispiel: + System.out.println(cc.top()); // A + Eine leere Sammlung liefert das Zeichen mit dem Zeichencode 0zurück. + public String toString() + Liefert eine lesbare Darstellung der Sammlung. + System.out.println(cc); // (A, B, R, A, K, A, D, A, B, R, A) + Die Reihenfolge der Elemente ist irrelevant. + CharCollection moreThan(int m) + Liefert eine neue Sammlung, in der nur noch die Buchstaben enthalten sind, die mehr als m-mal vorkommen. Beispiel: Nur Buchstaben, die wenigstens 2-mal vorkommen, bleiben übrig. K und D fallen heraus: + System.out.println(cc.moreThan(1)); // (A, B, R, A, A, A, B, R, A) + public boolean equals(Object x) + Vergleicht eine Sammlung mit einem anderen Objekt x. Liefert true, wenn x eine Sammlung mit den gleichen Buchstaben ist, und ansonsten false. Die Reihenfolge spielt keine Rolle. + CharCollection except(CharCollection cc) + Liefert eine neue Sammlung aus den Buchstaben dieser Sammlung, wobei alle Buchstaben von cc entfernt sind. Beispiel: + System.out.println(cc.except(new CharCollection("ABRAXAS"))); // (K, D, A, B, R, A) + boolean isSubset(CharCollection cc) + Liefert zurück, ob die als Parameter übergebene Sammlung in der Sammlung enthalten ist, für die die Methode aufgerufen wurde (this). Beispiel: + System.out.println(cc.isSubset(new CharCollection("ABRAAA"))); // true + +Ihre Lösung muss intern als Objektvariable eine List zur Speicherung der Buchstabensammlung verwenden! diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/TextFileFormatException.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/TextFileFormatException.java index cab3e42..d4a2fe1 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/TextFileFormatException.java +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/TextFileFormatException.java @@ -1,8 +1,8 @@ -package de.joethei.hs.java2.praktikum.praktikum3; - -public class TextFileFormatException extends Exception{ - - public TextFileFormatException(String s) { - super(s); - } +package de.joethei.hs.java2.praktikum.praktikum3; + +public class TextFileFormatException extends Exception{ + + public TextFileFormatException(String s) { + super(s); + } } \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/Vorlesung.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/Vorlesung.java index 35cb624..58cac0d 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/Vorlesung.java +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/Vorlesung.java @@ -1,43 +1,43 @@ -package de.joethei.hs.java2.praktikum.praktikum3; - -import java.util.List; - -public class Vorlesung { - private String studiengruppe; - private String title; - private String dozent; - private int teilnehmerzahl; - - public Vorlesung(List list) throws TextFileFormatException { - if(list.size() != 4) throw new TextFileFormatException("invalid number of Strings in list"); - this.studiengruppe = list.get(0); - this.title = list.get(1); - this.dozent = list.get(2); - try { - this.teilnehmerzahl = Integer.parseInt(list.get(3)); - }catch (NumberFormatException ex) { - throw new TextFileFormatException("Input is no number"); - } - } - - String getStudiengruppe() { - return studiengruppe; - } - - String getTitle() { - return title; - } - - String getDozent() { - return dozent; - } - - int getTeilnehmerzahl() { - return teilnehmerzahl; - } - - @Override - public String toString() { - return studiengruppe + ":" + title + ":" + dozent + ":" + teilnehmerzahl; - } +package de.joethei.hs.java2.praktikum.praktikum3; + +import java.util.List; + +public class Vorlesung { + private String studiengruppe; + private String title; + private String dozent; + private int teilnehmerzahl; + + public Vorlesung(List list) throws TextFileFormatException { + if(list.size() != 4) throw new TextFileFormatException("invalid number of Strings in list"); + this.studiengruppe = list.get(0); + this.title = list.get(1); + this.dozent = list.get(2); + try { + this.teilnehmerzahl = Integer.parseInt(list.get(3)); + }catch (NumberFormatException ex) { + throw new TextFileFormatException("Input is no number"); + } + } + + String getStudiengruppe() { + return studiengruppe; + } + + String getTitle() { + return title; + } + + String getDozent() { + return dozent; + } + + int getTeilnehmerzahl() { + return teilnehmerzahl; + } + + @Override + public String toString() { + return studiengruppe + ":" + title + ":" + dozent + ":" + teilnehmerzahl; + } } \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/Vorlesungsverzeichnis.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/Vorlesungsverzeichnis.java index 6cfc80c..c2a47c2 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/Vorlesungsverzeichnis.java +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/Vorlesungsverzeichnis.java @@ -1,112 +1,112 @@ -package de.joethei.hs.java2.praktikum.praktikum3; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.*; -import java.util.stream.Collectors; - -public class Vorlesungsverzeichnis implements Comparator{ - - private Set vorlesungen = new HashSet<>(); - - public Vorlesungsverzeichnis(String filename) throws IOException, TextFileFormatException { - List> datenbasis = load(filename); - for (List entry : datenbasis) { - if (entry.size() != 4) throw new TextFileFormatException("unexpected number of Strings in line"); - for (String s : entry) if (s.isEmpty()) throw new TextFileFormatException("empty attribute"); - - vorlesungen.add(new Vorlesung(entry)); - } - } - - /** - * Lädt die Datenbasis von einer Datei - * @param filename Dateiname - * @return Liste der Einträge - * @throws IOException Dateifehler - */ - private List> load(String filename) throws IOException { - List> result = new ArrayList<>(); - try(BufferedReader br = new BufferedReader(new FileReader(filename))) { - for (String line = br.readLine(); line != null; line = br.readLine()) - result.add(Arrays.asList(line.split(":"))); - return result; - } - } - - /** - * @return eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen. - */ - public List titles() { - SortedSet set = new TreeSet<>(); - vorlesungen.forEach(vorlesung -> set.add(vorlesung.getTitle())); - return new ArrayList<>(set); - } - - /** - * @return die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten. - */ - public Set workaholics() { - Map> map = vorlesungen.stream().collect( - Collectors.groupingBy(Vorlesung::getDozent, - Collectors.mapping(Vorlesung::getTitle, Collectors.toSet()))); - Set set = new HashSet<>(); - map.forEach((s, strings) -> { - if(strings.size() >= 2) set.add(s); - }); - return set; - } - - /** - * @return eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet. - */ - public Map> groupToTitles() { - Map> map = vorlesungen.stream().collect( - Collectors.groupingBy(Vorlesung::getStudiengruppe, - Collectors.mapping(Vorlesung::getTitle, Collectors.toList()))); - map.forEach((s, strings) -> Collections.sort(strings)); - return map; - } - - /** - * @return eine Map, die Vorlesungen auf Listen von Dozenten, die diese Vorlesungen halten, abbildet. - * Als Schlüssel werden in der Map nur Vorlesungen verwendet, die von unterschiedlichen Dozenten gehalten werden. - */ - public Map> multipleTitles() { - Map> map = vorlesungen.stream().collect( - Collectors.groupingBy(Vorlesung::getTitle, - Collectors.mapping(Vorlesung::getDozent, Collectors.toList()))); - - Iterator>> iterator = map.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry> entry = iterator.next(); - if(entry.getValue().size() < 2) iterator.remove(); - Collections.sort(entry.getValue()); - } - - return map; - - } - - /** - * @return Liste mit Vorlesungstitel absteigend sortiert nach Teilnehmerzahl - */ - public List descendingTitles() { - SortedSet set = new TreeSet<>(this.reversed()); - set.addAll(vorlesungen); - - List list = new ArrayList<>(); - set.forEach(vorlesung -> list.add(vorlesung.getTitle())); - - return list; - } - - /** - * für die aufsteigende Sortierung - */ - @Override - public int compare(Vorlesung o1, Vorlesung o2) { - return Integer.compare(o1.getTeilnehmerzahl(), o2.getTeilnehmerzahl()); - } +package de.joethei.hs.java2.praktikum.praktikum3; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +public class Vorlesungsverzeichnis implements Comparator{ + + private Set vorlesungen = new HashSet<>(); + + public Vorlesungsverzeichnis(String filename) throws IOException, TextFileFormatException { + List> datenbasis = load(filename); + for (List entry : datenbasis) { + if (entry.size() != 4) throw new TextFileFormatException("unexpected number of Strings in line"); + for (String s : entry) if (s.isEmpty()) throw new TextFileFormatException("empty attribute"); + + vorlesungen.add(new Vorlesung(entry)); + } + } + + /** + * Lädt die Datenbasis von einer Datei + * @param filename Dateiname + * @return Liste der Einträge + * @throws IOException Dateifehler + */ + private List> load(String filename) throws IOException { + List> result = new ArrayList<>(); + try(BufferedReader br = new BufferedReader(new FileReader(filename))) { + for (String line = br.readLine(); line != null; line = br.readLine()) + result.add(Arrays.asList(line.split(":"))); + return result; + } + } + + /** + * @return eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen. + */ + public List titles() { + SortedSet set = new TreeSet<>(); + vorlesungen.forEach(vorlesung -> set.add(vorlesung.getTitle())); + return new ArrayList<>(set); + } + + /** + * @return die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten. + */ + public Set workaholics() { + Map> map = vorlesungen.stream().collect( + Collectors.groupingBy(Vorlesung::getDozent, + Collectors.mapping(Vorlesung::getTitle, Collectors.toSet()))); + Set set = new HashSet<>(); + map.forEach((s, strings) -> { + if(strings.size() >= 2) set.add(s); + }); + return set; + } + + /** + * @return eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet. + */ + public Map> groupToTitles() { + Map> map = vorlesungen.stream().collect( + Collectors.groupingBy(Vorlesung::getStudiengruppe, + Collectors.mapping(Vorlesung::getTitle, Collectors.toList()))); + map.forEach((s, strings) -> Collections.sort(strings)); + return map; + } + + /** + * @return eine Map, die Vorlesungen auf Listen von Dozenten, die diese Vorlesungen halten, abbildet. + * Als Schlüssel werden in der Map nur Vorlesungen verwendet, die von unterschiedlichen Dozenten gehalten werden. + */ + public Map> multipleTitles() { + Map> map = vorlesungen.stream().collect( + Collectors.groupingBy(Vorlesung::getTitle, + Collectors.mapping(Vorlesung::getDozent, Collectors.toList()))); + + Iterator>> iterator = map.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + if(entry.getValue().size() < 2) iterator.remove(); + Collections.sort(entry.getValue()); + } + + return map; + + } + + /** + * @return Liste mit Vorlesungstitel absteigend sortiert nach Teilnehmerzahl + */ + public List descendingTitles() { + SortedSet set = new TreeSet<>(this.reversed()); + set.addAll(vorlesungen); + + List list = new ArrayList<>(); + set.forEach(vorlesung -> list.add(vorlesung.getTitle())); + + return list; + } + + /** + * für die aufsteigende Sortierung + */ + @Override + public int compare(Vorlesung o1, Vorlesung o2) { + return Integer.compare(o1.getTeilnehmerzahl(), o2.getTeilnehmerzahl()); + } } \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/aufgabe.txt b/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/aufgabe.txt index f01cade..f94388b 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/aufgabe.txt +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum3/aufgabe.txt @@ -1,43 +1,43 @@ -In einer Textdatei sind Vorlesungsdaten gespeichert. Jede Zeile besteht aus vier Teilstrings, die mit Doppelpunkten getrennt sind. Der Doppelpunkt kommt sonst nicht vor. Die vier Strings in einer Zeile enthalten der Reihe nach: - - Studiengruppe - Titel der Vorlesung - Dozent - Teilnehmerzahl - -Ein Ausschnitt aus der Datei könnte so aussehen: - - I2:Java 2:Rump:100 - I2:Algorithmen und Datenstrukturen:Totzauer:80 - MT2:Mathematik 2:von Coelln:60 - MT2:Audio-/Videotechnik:Lemke:50 - E2:Mathematik 2:Rabe:70 - - -Die folgende Methode load liest eine solche Datei und liefert sie als Liste von Stringlisten ("Datenbasis") zurück. - -public static List> load(String filename) throws IOException { - List> result = new ArrayList>(); - BufferedReader br = new BufferedReader(new FileReader(filename)); - for (String line=br.readLine(); line!=null; line=br.readLine()) - result.add(Arrays.asList(line.split(":"))); - br.close(); - return result; -} - -Kapseln Sie eine derartige Datenbasis in einer Klasse Vorlesungsverzeichnis im Paket vorlesung mit den folgenden Methoden: - - Konstruktor - Lädt die Datenbasis von einer Datei, deren Name als String übergeben wird. Für alle möglichen Formatfehler in der Datei soll eine TextFileFormatException mit einer aussagekräftigen Fehlermeldung geworfen werden. - public List titles() - Liefert eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen. - public Set workaholics() - Liefert die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten. - public Map> groupToTitles() - Liefert eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet. Unter dem Schlüssel MT2 wäre für die oben angegebene Datenbasis zum Beispiel als Wert die Liste [Mathematik 2, Audio-/Videotechnik] zu finden. - public Map> multipleTitles() - Liefert eine Map, die Vorlesungen auf Listen von Dozenten, die diese Vorlesungen halten, abbildet. Als Schlüssel werden in der Map nur Vorlesungen verwendet, die von unterschiedlichen Dozenten gehalten werden. Entsprechend der obigen Datenbasis würde in diesem Fall nur ein Eintrag in der Map stehen mit dem Schlüssel Mathematik 2 und dem Wert [von Coelln, Rabe] als Liste. - public List descendingTitles() - Liefert eine nach Teilnehmerzahl absteigend(!) sortierte Liste mit den Titeln aller Vorlesungen. - +In einer Textdatei sind Vorlesungsdaten gespeichert. Jede Zeile besteht aus vier Teilstrings, die mit Doppelpunkten getrennt sind. Der Doppelpunkt kommt sonst nicht vor. Die vier Strings in einer Zeile enthalten der Reihe nach: + + Studiengruppe + Titel der Vorlesung + Dozent + Teilnehmerzahl + +Ein Ausschnitt aus der Datei könnte so aussehen: + + I2:Java 2:Rump:100 + I2:Algorithmen und Datenstrukturen:Totzauer:80 + MT2:Mathematik 2:von Coelln:60 + MT2:Audio-/Videotechnik:Lemke:50 + E2:Mathematik 2:Rabe:70 + + +Die folgende Methode load liest eine solche Datei und liefert sie als Liste von Stringlisten ("Datenbasis") zurück. + +public static List> load(String filename) throws IOException { + List> result = new ArrayList>(); + BufferedReader br = new BufferedReader(new FileReader(filename)); + for (String line=br.readLine(); line!=null; line=br.readLine()) + result.add(Arrays.asList(line.split(":"))); + br.close(); + return result; +} + +Kapseln Sie eine derartige Datenbasis in einer Klasse Vorlesungsverzeichnis im Paket vorlesung mit den folgenden Methoden: + + Konstruktor + Lädt die Datenbasis von einer Datei, deren Name als String übergeben wird. Für alle möglichen Formatfehler in der Datei soll eine TextFileFormatException mit einer aussagekräftigen Fehlermeldung geworfen werden. + public List titles() + Liefert eine alphabetisch sortierte Liste mit den Titeln aller Vorlesungen. + public Set workaholics() + Liefert die Menge derjenigen Dozenten, die zwei oder mehr Vorlesungen halten. + public Map> groupToTitles() + Liefert eine Map, die Studiengruppen auf Listen von Vorlesungstiteln abbildet. Unter dem Schlüssel MT2 wäre für die oben angegebene Datenbasis zum Beispiel als Wert die Liste [Mathematik 2, Audio-/Videotechnik] zu finden. + public Map> multipleTitles() + Liefert eine Map, die Vorlesungen auf Listen von Dozenten, die diese Vorlesungen halten, abbildet. Als Schlüssel werden in der Map nur Vorlesungen verwendet, die von unterschiedlichen Dozenten gehalten werden. Entsprechend der obigen Datenbasis würde in diesem Fall nur ein Eintrag in der Map stehen mit dem Schlüssel Mathematik 2 und dem Wert [von Coelln, Rabe] als Liste. + public List descendingTitles() + Liefert eine nach Teilnehmerzahl absteigend(!) sortierte Liste mit den Titeln aller Vorlesungen. + Die Klasse Vorlesungsverzeichnis muss die Daten zu den Vorlesungen intern als Objektvariable in einer Set speichern und verarbeiten! \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/ClientRunnable.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/ClientRunnable.java index 3933aa7..b2ef683 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/ClientRunnable.java +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/ClientRunnable.java @@ -1,41 +1,41 @@ -package de.joethei.hs.java2.praktikum.praktikum4; - -import java.io.*; -import java.net.Socket; -import java.util.Arrays; -import java.util.List; - -public class ClientRunnable implements Runnable{ - - private Socket socket; - private BufferedReader bufferedReader; - - public ClientRunnable(Socket socket) { - this.socket = socket; - try { - bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void run() { - try { - String input = bufferedReader.readLine(); - BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); - input = input.replace(",", " "); - List arguments = Arrays.asList(input.split(" ")); - - KlausurenServer.getCommands().get(arguments.get(0).toLowerCase()).handle(bufferedWriter, arguments); - - bufferedWriter.flush(); - bufferedWriter.close(); - socket.close(); - Thread.currentThread().interrupt(); - - } catch (IOException e) { - e.printStackTrace(); - } - } +package de.joethei.hs.java2.praktikum.praktikum4; + +import java.io.*; +import java.net.Socket; +import java.util.Arrays; +import java.util.List; + +public class ClientRunnable implements Runnable{ + + private Socket socket; + private BufferedReader bufferedReader; + + public ClientRunnable(Socket socket) { + this.socket = socket; + try { + bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void run() { + try { + String input = bufferedReader.readLine(); + BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); + input = input.replace(",", " "); + List arguments = Arrays.asList(input.split(" ")); + + KlausurenServer.getCommands().get(arguments.get(0).toLowerCase()).handle(bufferedWriter, arguments); + + bufferedWriter.flush(); + bufferedWriter.close(); + socket.close(); + Thread.currentThread().interrupt(); + + } catch (IOException e) { + e.printStackTrace(); + } + } } \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/CommandHandler.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/CommandHandler.java index e7706bb..71f5629 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/CommandHandler.java +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/CommandHandler.java @@ -1,11 +1,11 @@ -package de.joethei.hs.java2.praktikum.praktikum4; - -import java.io.BufferedWriter; -import java.io.IOException; -import java.util.List; - -public interface CommandHandler { - - void handle(BufferedWriter writer, List args) throws IOException; - +package de.joethei.hs.java2.praktikum.praktikum4; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.util.List; + +public interface CommandHandler { + + void handle(BufferedWriter writer, List args) throws IOException; + } \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/KlausurenServer.java b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/KlausurenServer.java index 931a194..845dbbe 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/KlausurenServer.java +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/KlausurenServer.java @@ -1,168 +1,167 @@ -package de.joethei.hs.java2.praktikum.praktikum4; - -import java.io.*; -import java.net.ServerSocket; -import java.util.*; -import java.util.concurrent.*; - -public class KlausurenServer { - - private ConcurrentMap> data = new ConcurrentHashMap<>(); - private ExecutorService executorService = Executors.newCachedThreadPool(); - private ServerSocket serverSocket; - - private static Map commands = new HashMap<>(); - - - static Map getCommands() { - return commands; - } - - private boolean running; - - public KlausurenServer(int port) { - load(); - - commands.put("test", ((writer, args) -> writer.write("Hallo Welt"))); - commands.put("delall", (writer, args) -> { - data.clear(); - save(); - }); - commands.put("put", (writer, args) -> { - if (args.size() >= 3) { - TreeSet set = new TreeSet<>(); - for (int i = 2; i <= args.size() - 1; i++) { - try { - set.add(Integer.parseInt(args.get(i))); - } catch (NumberFormatException ex) { - } - } - writer.write("1 "); - if (data.containsKey(args.get(1).toLowerCase())) { - writer.write(data.get(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replaceAll(" ", "")); - } - data.put(args.get(1).toLowerCase(), set); - save(); - } else { - writer.write("0"); - } - }); - commands.put("getall", (writer, args) -> { - if (!data.isEmpty()) { - writer.write("1 "); - ConcurrentMap> set = new ConcurrentHashMap<>(data); - Set> result = new HashSet<>(); - - set.forEach((key, value) -> set.forEach((s, integers) -> { - if(!value.equals(integers)) { - if (integers.containsAll(value)) - set.remove(key); - } - })); - - set.forEach((key, value) -> result.add(value)); - - result.removeIf(TreeSet::isEmpty); - - writer.write(result.toString().substring(1, result.toString().length()-1).replace(" ", "")); - } else { - writer.write("0"); - } - }); - commands.put("get", (writer, args) -> { - if (args.size() == 2) { - if (data.containsKey(args.get(1).toLowerCase())) { - writer.write("1 " + data.get(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replace(" ", "")); - } else writer.write("0"); - } else writer.write("0"); - }); - commands.put("del", (writer, args) -> { - if (args.size() == 2) { - if (data.containsKey(args.get(1).toLowerCase())) { - writer.write("1 " + data.remove(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replace(" ", "")); - save(); - } else writer.write("0"); - } else writer.write("0"); - }); - commands.put("stop", ((writer, args) -> { - writer.write("1"); - save(); - running = false; - })); - running = true; - Runnable runnable = () -> { - try { - serverSocket = new ServerSocket(port); - System.out.println("waiting for clients"); - while (running) { - executorService.submit(new ClientRunnable(serverSocket.accept())); - } - executorService.shutdown(); - try { - executorService.awaitTermination(1, TimeUnit.MINUTES); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - - serverSocket.close(); - System.out.println("server shutdown"); - Thread.currentThread().interrupt(); - } catch (IOException e) { - e.printStackTrace(); - } - - }; - Thread thread = new Thread(runnable); - thread.start(); - } - - synchronized void load() { - FileReader fileReader = null; - try { - fileReader = new FileReader(getClass().getClassLoader().getResource("praktikum4/data.txt").getFile()); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - try (BufferedReader br = new BufferedReader(Objects.requireNonNull(fileReader))) { - for (String line = br.readLine(); line != null; line = br.readLine()) { - TreeSet set = new TreeSet<>(); - String[] array = line.split(":"); - for (int i = 1; i <= array.length - 1; i++) { - set.add(Integer.parseInt(array[i])); - } - data.put(array[0], set); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - - synchronized void save() { - FileOutputStream fileWriter; - PrintWriter printWriter = null; - try { - fileWriter = new FileOutputStream(getClass().getClassLoader().getResource("praktikum4/data.txt").getFile()); - printWriter = new PrintWriter(fileWriter); - - for (Map.Entry> entry : data.entrySet()) { - StringBuilder tmp = new StringBuilder(entry.getKey()); - for (int integer : entry.getValue()) { - tmp.append(":").append(integer); - } - printWriter.println(tmp.toString()); - - } - } catch (IOException e) { - e.printStackTrace(); - } finally { - assert printWriter != null; - printWriter.close(); - - - } - } - - public static void main(String[] args) { - new KlausurenServer(Integer.parseInt(args[0])); - } +package de.joethei.hs.java2.praktikum.praktikum4; + +import java.io.*; +import java.net.ServerSocket; +import java.util.*; +import java.util.concurrent.*; + +public class KlausurenServer { + + private ConcurrentMap> data = new ConcurrentHashMap<>(); + private ExecutorService executorService = Executors.newCachedThreadPool(); + private ServerSocket serverSocket; + + private static Map commands = new HashMap<>(); + Hallo Welt + static Map getCommands() { + return commands; + } + + private boolean running; + + public KlausurenServer(int port) { + load(); + + commands.put("test", ((writer, args) -> writer.write("Hallo Welt"))); + commands.put("delall", (writer, args) -> { + data.clear(); + save(); + }); + commands.put("put", (writer, args) -> { + if (args.size() >= 3) { + TreeSet set = new TreeSet<>(); + for (int i = 2; i <= args.size() - 1; i++) { + try { + set.add(Integer.parseInt(args.get(i))); + } catch (NumberFormatException ex) { + } + } + writer.write("1 "); + if (data.containsKey(args.get(1).toLowerCase())) { + writer.write(data.get(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replaceAll(" ", "")); + } + data.put(args.get(1).toLowerCase(), set); + save(); + } else { + writer.write("0"); + } + }); + commands.put("getall", (writer, args) -> { + if (!data.isEmpty()) { + writer.write("1 "); + ConcurrentMap> set = new ConcurrentHashMap<>(data); + Set> result = new HashSet<>(); + + set.forEach((key, value) -> set.forEach((s, integers) -> { + if(!value.equals(integers)) { + if (integers.containsAll(value)) + set.remove(key); + } + })); + + set.forEach((key, value) -> result.add(value)); + + result.removeIf(TreeSet::isEmpty); + + writer.write(result.toString().substring(1, result.toString().length()-1).replace(" ", "")); + } else { + writer.write("0"); + } + }); + commands.put("get", (writer, args) -> { + if (args.size() == 2) { + if (data.containsKey(args.get(1).toLowerCase())) { + writer.write("1 " + data.get(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replace(" ", "")); + } else writer.write("0"); + } else writer.write("0"); + }); + commands.put("del", (writer, args) -> { + if (args.size() == 2) { + if (data.containsKey(args.get(1).toLowerCase())) { + writer.write("1 " + data.remove(args.get(1).toLowerCase()).toString().replace('[', ' ').replace(']', ' ').replace(" ", "")); + save(); + } else writer.write("0"); + } else writer.write("0"); + }); + commands.put("stop", ((writer, args) -> { + writer.write("1"); + save(); + running = false; + })); + running = true; + Runnable runnable = () -> { + try { + serverSocket = new ServerSocket(port); + System.out.println("waiting for clients"); + while (running) { + executorService.submit(new ClientRunnable(serverSocket.accept())); + } + executorService.shutdown(); + try { + executorService.awaitTermination(1, TimeUnit.MINUTES); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + + serverSocket.close(); + System.out.println("server shutdown"); + Thread.currentThread().interrupt(); + } catch (IOException e) { + e.printStackTrace(); + } + + }; + Thread thread = new Thread(runnable); + thread.start(); + } + + synchronized void load() { + FileReader fileReader = null; + try { + fileReader = new FileReader(getClass().getClassLoader().getResource("praktikum4/data.txt").getFile()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + try (BufferedReader br = new BufferedReader(Objects.requireNonNull(fileReader))) { + for (String line = br.readLine(); line != null; line = br.readLine()) { + TreeSet set = new TreeSet<>(); + String[] array = line.split(":"); + for (int i = 1; i <= array.length - 1; i++) { + set.add(Integer.parseInt(array[i])); + } + data.put(array[0], set); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + synchronized void save() { + FileOutputStream fileWriter; + PrintWriter printWriter = null; + try { + fileWriter = new FileOutputStream(getClass().getClassLoader().getResource("praktikum4/data.txt").getFile()); + printWriter = new PrintWriter(fileWriter); + + for (Map.Entry> entry : data.entrySet()) { + StringBuilder tmp = new StringBuilder(entry.getKey()); + for (int integer : entry.getValue()) { + tmp.append(":").append(integer); + } + printWriter.println(tmp.toString()); + + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + assert printWriter != null; + printWriter.close(); + + + } + } + + public static void main(String[] args) { + new KlausurenServer(Integer.parseInt(args[0])); + } } \ No newline at end of file diff --git a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt index 22fe623..2188cef 100644 --- a/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt +++ b/src/main/java/de/joethei/hs/java2/praktikum/praktikum4/aufgabe.txt @@ -1,75 +1,75 @@ -Entwickeln Sie eine Klasse KlausurenServer, mit der verwaltetet werden kann, -welche Klausuren ein(e) Student/-in mitschreiben möchte. -Zu einer Mail-Adresse werden dabei die IDs der Klausuren gespeichert, z.B. - - max.mueller@stud.hs-emden-leer.de: 34, 45, 56 - peter.meier@stud.hs-emden-leer.de: 1, 8, 34, 67 - axel.maier@stud.hs-emden-leer.de: 34, 56 - ... - -Intern werden diese Daten als (key,value)-Paare in einer Map gespeichert, wobei als key die Mail-Adresse verwendet wird. -Der Konstruktor der Klasse KlausurenServer erhält als Parameter den Port, auf dem Anfragen entgegengenommen werden. -Jede Anfrage besteht aus einer Textzeile, die eines der nachfolgend beschriebenen Kommandos enthalten darf, -wobei die Kommandos groß oder klein geschrieben werden können. -Als Antwort wird eine Textzeile zurückgeschickt, die immer mit 0 (Misserfolg) oder 1 (Erfolg) beginnt. -Die (key,value)-Paare sollen auch nach einem Stoppen und Starten des Servers erhalten bleiben -und müssen somit in einer Datei gespeichert werden. - - PUT key newvalue -> 1 oldvalue - Trägt unter dem Schlüssel key den Wert newvalue ein. Die Antwort besteht aus einer 1 und dem alten Wert des Schlüssels. - Beim ersten Eintrag ist oldvalue ein leerer String. Falls newvalue Leerzeichen enthält, sollen diese entfernt werden. - GET key -> 1 value oder 0 - Liefert den Wert, der unter dem Schlüssel key eingetragen ist. - Die IDs der Klausuren werden dabei immer aufsteigend sortiert zurückgegeben. - Wenn der Schlüssel nicht bekannt ist, ist die Antwort 0. - DEL key -> 1 oldvalue oder 0 - Löscht Schlüssel und Wert und liefert den gelöschten Wert zurück. - Wenn der Schlüssel nicht bekannt war, wird 0 zurückgeliefert. - GETALL -> 1 value oder 0 - Liefert eine Auflistung aller Klausurenwahlen. - Wenn die Wahl eines/einer Studierenden in der Wahl eines/einer anderen Studierenden enthalten ist, - fällt diese für diese Anfrage weg. - Beim obigen Beispiel würde die Wahl von Axel Maier entfallen, - da diese Klausuren auch von Max Mueller gewählt wurden. value soll in folgender Form zurückgegeben werden: - [34,45,56],[1,8,34,67] - Falls (noch) keine Klausurenwahlen vorhanden sind, wird 0 zurückgegeben. - STOP -> 1 - Beendet den Dienst und somit den Server. - -Eine main-Methode liest von der Kommandozeile einen Port ein, legt ein KlausurenServer-Objekt an und startet den Server. -Der KlausurenServer arbeitet ähnlich wie ein Webserver. -Er verarbeitet jede Anfrage einzeln in einem eigenen Thread(!) und unabhängig von anderen Anfragen. -Die Verbindung zum Client wird nach jeder Antwort wieder geschlossen. -Ein Client, der mehrere Anfragen abwickeln möchte, muss für jede Anfrage eine neue Verbindung zum Server aufnehmen. -Ein solches Protokoll wird als "zustandslos" bezeichnet, weil mit jeder Anfrage eine neue Kommunikationssequenz beginnt, -die keine Informationen aus früheren Anfragen voraussetzt. -Praktisch alle Betriebssysteme enthalten einen Telnet-Client, mit dem der Klausurenserver getestet werden kann. -Dieser muss bei Windows-Systemen aber ggfls. nachinstalliert werden. -Das folgende Beispiel zeigt den Dialog auf einem Unix-System. -Der KlausurenServer wurde in einem anderen Terminal gestartet und läuft bereits. -Zur Vereinfachung sind die Protokollausgaben des Telnet-Clients ausgeblendet: - -$ telnet localhost 2000 -put max.mueller@stud.hs-emden-leer.de 34,45,56 -1 -$ telnet localhost 2000 -put axel.maier@stud.hs-emden-leer.de 34, 56 -1 -$ telnet localhost 2000 -getall -1 [34,45,56] -$ telnet localhost 2000 -put max.mueller@stud.hs-emden-leer.de 34, 45 -1 34,45,56 -$ telnet localhost 2000 -get max.mueller@stud.hs-emden-leer.de -1 34,45 -$ telnet localhost 2000 -del max.mueller@stud.hs-emden-leer.de -1 34,45 -$ telnet localhost 2000 -get max.mueller@stud.hs-emden-leer.de -0 -$ telnet localhost 2000 -stop +Entwickeln Sie eine Klasse KlausurenServer, mit der verwaltetet werden kann, +welche Klausuren ein(e) Student/-in mitschreiben möchte. +Zu einer Mail-Adresse werden dabei die IDs der Klausuren gespeichert, z.B. + + max.mueller@stud.hs-emden-leer.de: 34, 45, 56 + peter.meier@stud.hs-emden-leer.de: 1, 8, 34, 67 + axel.maier@stud.hs-emden-leer.de: 34, 56 + ... + +Intern werden diese Daten als (key,value)-Paare in einer Map gespeichert, wobei als key die Mail-Adresse verwendet wird. +Der Konstruktor der Klasse KlausurenServer erhält als Parameter den Port, auf dem Anfragen entgegengenommen werden. +Jede Anfrage besteht aus einer Textzeile, die eines der nachfolgend beschriebenen Kommandos enthalten darf, +wobei die Kommandos groß oder klein geschrieben werden können. +Als Antwort wird eine Textzeile zurückgeschickt, die immer mit 0 (Misserfolg) oder 1 (Erfolg) beginnt. +Die (key,value)-Paare sollen auch nach einem Stoppen und Starten des Servers erhalten bleiben +und müssen somit in einer Datei gespeichert werden. + + PUT key newvalue -> 1 oldvalue + Trägt unter dem Schlüssel key den Wert newvalue ein. Die Antwort besteht aus einer 1 und dem alten Wert des Schlüssels. + Beim ersten Eintrag ist oldvalue ein leerer String. Falls newvalue Leerzeichen enthält, sollen diese entfernt werden. + GET key -> 1 value oder 0 + Liefert den Wert, der unter dem Schlüssel key eingetragen ist. + Die IDs der Klausuren werden dabei immer aufsteigend sortiert zurückgegeben. + Wenn der Schlüssel nicht bekannt ist, ist die Antwort 0. + DEL key -> 1 oldvalue oder 0 + Löscht Schlüssel und Wert und liefert den gelöschten Wert zurück. + Wenn der Schlüssel nicht bekannt war, wird 0 zurückgeliefert. + GETALL -> 1 value oder 0 + Liefert eine Auflistung aller Klausurenwahlen. + Wenn die Wahl eines/einer Studierenden in der Wahl eines/einer anderen Studierenden enthalten ist, + fällt diese für diese Anfrage weg. + Beim obigen Beispiel würde die Wahl von Axel Maier entfallen, + da diese Klausuren auch von Max Mueller gewählt wurden. value soll in folgender Form zurückgegeben werden: + [34,45,56],[1,8,34,67] + Falls (noch) keine Klausurenwahlen vorhanden sind, wird 0 zurückgegeben. + STOP -> 1 + Beendet den Dienst und somit den Server. + +Eine main-Methode liest von der Kommandozeile einen Port ein, legt ein KlausurenServer-Objekt an und startet den Server. +Der KlausurenServer arbeitet ähnlich wie ein Webserver. +Er verarbeitet jede Anfrage einzeln in einem eigenen Thread(!) und unabhängig von anderen Anfragen. +Die Verbindung zum Client wird nach jeder Antwort wieder geschlossen. +Ein Client, der mehrere Anfragen abwickeln möchte, muss für jede Anfrage eine neue Verbindung zum Server aufnehmen. +Ein solches Protokoll wird als "zustandslos" bezeichnet, weil mit jeder Anfrage eine neue Kommunikationssequenz beginnt, +die keine Informationen aus früheren Anfragen voraussetzt. +Praktisch alle Betriebssysteme enthalten einen Telnet-Client, mit dem der Klausurenserver getestet werden kann. +Dieser muss bei Windows-Systemen aber ggfls. nachinstalliert werden. +Das folgende Beispiel zeigt den Dialog auf einem Unix-System. +Der KlausurenServer wurde in einem anderen Terminal gestartet und läuft bereits. +Zur Vereinfachung sind die Protokollausgaben des Telnet-Clients ausgeblendet: + +$ telnet localhost 2000 +put max.mueller@stud.hs-emden-leer.de 34,45,56 +1 +$ telnet localhost 2000 +put axel.maier@stud.hs-emden-leer.de 34, 56 +1 +$ telnet localhost 2000 +getall +1 [34,45,56] +$ telnet localhost 2000 +put max.mueller@stud.hs-emden-leer.de 34, 45 +1 34,45,56 +$ telnet localhost 2000 +get max.mueller@stud.hs-emden-leer.de +1 34,45 +$ telnet localhost 2000 +del max.mueller@stud.hs-emden-leer.de +1 34,45 +$ telnet localhost 2000 +get max.mueller@stud.hs-emden-leer.de +0 +$ telnet localhost 2000 +stop 1 \ No newline at end of file diff --git a/src/main/resources/praktikum3/vorlesungen-format.txt b/src/main/resources/praktikum3/vorlesungen-format.txt index 405dbb1..eb51178 100644 --- a/src/main/resources/praktikum3/vorlesungen-format.txt +++ b/src/main/resources/praktikum3/vorlesungen-format.txt @@ -1,7 +1,7 @@ -I2:Java 2:Rump:100 -I2:Algorithmen und Datenstrukturen:Totzauer:30 -MT2::von Coelln:60 -MT2:Audio-/Videotechnik:Lemke:50 -E2:Mathematik 2:Rabe:20 -I4:Rechnerarchitekturen:von Coelln:45 +I2:Java 2:Rump:100 +I2:Algorithmen und Datenstrukturen:Totzauer:30 +MT2::von Coelln:60 +MT2:Audio-/Videotechnik:Lemke:50 +E2:Mathematik 2:Rabe:20 +I4:Rechnerarchitekturen:von Coelln:45 I4:Internet-Technologien:Rump:40 \ No newline at end of file diff --git a/src/main/resources/praktikum3/vorlesungen-number.txt b/src/main/resources/praktikum3/vorlesungen-number.txt index 9525bd5..fb21749 100644 --- a/src/main/resources/praktikum3/vorlesungen-number.txt +++ b/src/main/resources/praktikum3/vorlesungen-number.txt @@ -1,7 +1,7 @@ -I2:Java 2:Rump:100 -I2:Algorithmen und Datenstrukturen:Totzauer:80 -MT2:Mathematik 2:von Coelln:60 -MT2:Audio-/Videotechnik:Lemke:5F -E2:Mathematik 2:Rabe:70 -I4:Rechnerarchitekturen:von Coelln:45 +I2:Java 2:Rump:100 +I2:Algorithmen und Datenstrukturen:Totzauer:80 +MT2:Mathematik 2:von Coelln:60 +MT2:Audio-/Videotechnik:Lemke:5F +E2:Mathematik 2:Rabe:70 +I4:Rechnerarchitekturen:von Coelln:45 I4:Internet-Technologien:Rump:40 \ No newline at end of file diff --git a/src/main/resources/praktikum3/vorlesungen.txt b/src/main/resources/praktikum3/vorlesungen.txt index c2507cd..f0c7b94 100644 --- a/src/main/resources/praktikum3/vorlesungen.txt +++ b/src/main/resources/praktikum3/vorlesungen.txt @@ -1,7 +1,7 @@ -I2:Java 2:Rump:100 -I2:Algorithmen und Datenstrukturen:Totzauer:80 -MT2:Mathematik 2:von Coelln:60 -MT2:Audio-/Videotechnik:Lemke:50 -E2:Mathematik 2:Rabe:70 -I4:Rechnerarchitekturen:von Coelln:45 +I2:Java 2:Rump:100 +I2:Algorithmen und Datenstrukturen:Totzauer:80 +MT2:Mathematik 2:von Coelln:60 +MT2:Audio-/Videotechnik:Lemke:50 +E2:Mathematik 2:Rabe:70 +I4:Rechnerarchitekturen:von Coelln:45 I4:Internet-Technologien:Rump:40 \ No newline at end of file diff --git a/src/test/java/de/joethei/hs/java2/tests/CharCollectionTest.java b/src/test/java/de/joethei/hs/java2/tests/CharCollectionTest.java index 39aa249..b26dfb6 100644 --- a/src/test/java/de/joethei/hs/java2/tests/CharCollectionTest.java +++ b/src/test/java/de/joethei/hs/java2/tests/CharCollectionTest.java @@ -1,65 +1,65 @@ -package de.joethei.hs.java2.tests; - -import de.joethei.hs.java2.praktikum.praktikum2.CharCollection; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class CharCollectionTest { - - @Test - public void constructors() { - assertEquals(new CharCollection("Hallo"), new CharCollection('H', 'a', 'l', 'l', 'o')); - } - - @Test - public void size() { - assertEquals(5, new CharCollection("Hallo").size()); - } - - - @Test - public void count() { - assertEquals(2, new CharCollection("Hallo").count('l')); - assertEquals(1, new CharCollection("Hallo").count('a')); - } - - @Test - public void different() { - assertEquals(4, new CharCollection("Hallo").different()); - } - - - @Test - public void top() { - assertEquals('l', new CharCollection("Hallo").top()); - } - - @Test - public void toStringTest() { - assertEquals("(H, a, l, l, o, W, e, l, t)", new CharCollection("HalloWelt").toString()); - } - - - @Test - public void moreThan() { - assertEquals(new CharCollection("lll"), new CharCollection("Hallol").moreThan(2)); - } - - @Test - public void equals() { - assertEquals(new CharCollection("llo"), new CharCollection("lol")); - assertNotEquals(new CharCollection("Hallo"), "Hallo"); - } - - @Test - public void except() { - assertEquals(new CharCollection("Halo"), new CharCollection("Hallo").except(new CharCollection("l"))); - } - - @Test - public void isSubsect() { - assertTrue(new CharCollection("Hallo").isSubset(new CharCollection("Hao"))); - } - +package de.joethei.hs.java2.tests; + +import de.joethei.hs.java2.praktikum.praktikum2.CharCollection; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class CharCollectionTest { + + @Test + public void constructors() { + assertEquals(new CharCollection("Hallo"), new CharCollection('H', 'a', 'l', 'l', 'o')); + } + + @Test + public void size() { + assertEquals(5, new CharCollection("Hallo").size()); + } + + + @Test + public void count() { + assertEquals(2, new CharCollection("Hallo").count('l')); + assertEquals(1, new CharCollection("Hallo").count('a')); + } + + @Test + public void different() { + assertEquals(4, new CharCollection("Hallo").different()); + } + + + @Test + public void top() { + assertEquals('l', new CharCollection("Hallo").top()); + } + + @Test + public void toStringTest() { + assertEquals("(H, a, l, l, o, W, e, l, t)", new CharCollection("HalloWelt").toString()); + } + + + @Test + public void moreThan() { + assertEquals(new CharCollection("lll"), new CharCollection("Hallol").moreThan(2)); + } + + @Test + public void equals() { + assertEquals(new CharCollection("llo"), new CharCollection("lol")); + assertNotEquals(new CharCollection("Hallo"), "Hallo"); + } + + @Test + public void except() { + assertEquals(new CharCollection("Halo"), new CharCollection("Hallo").except(new CharCollection("l"))); + } + + @Test + public void isSubsect() { + assertTrue(new CharCollection("Hallo").isSubset(new CharCollection("Hao"))); + } + } \ No newline at end of file diff --git a/src/test/java/de/joethei/hs/java2/tests/CharCollectionTest2.java b/src/test/java/de/joethei/hs/java2/tests/CharCollectionTest2.java index 4b97825..24e1ba3 100644 --- a/src/test/java/de/joethei/hs/java2/tests/CharCollectionTest2.java +++ b/src/test/java/de/joethei/hs/java2/tests/CharCollectionTest2.java @@ -1,113 +1,113 @@ -package de.joethei.hs.java2.tests; - -import de.joethei.hs.java2.praktikum.praktikum2.CharCollection; -import org.junit.Before; -import org.junit.Test; - -import java.util.Arrays; - -import static org.junit.Assert.*; - -public class CharCollectionTest2 { - - private CharCollection a, b, c, d; - - @Before - public void setUp() - { - a = new CharCollection('A', 'N', 'A', 'N', 'A', 'S'); - b = new CharCollection('H', 'O', 'C', 'H', 'S', 'C', 'H', 'U', 'L', 'E'); - c = new CharCollection("AAANNS"); - d = new CharCollection(); - } - - @Test - public void Laenge(){ - assertEquals(6,a.size()); - assertEquals(10,b.size()); - assertEquals(6,c.size()); - assertEquals(0,d.size()); - } - - @Test - public void Anzahl(){ - assertEquals(2,a.count('N')); - assertEquals(0,a.count('X')); - assertEquals(3,b.count('H')); - assertEquals(1,c.count('S')); - assertEquals(0,d.count('H')); - } - - @Test - public void Verschieden(){ - assertEquals(3,a.different()); - assertEquals(7,b.different()); - assertEquals(3,c.different()); - assertEquals(0,d.different()); - } - - @Test - public void Haeufigster(){ - assertEquals('A',a.top()); - assertEquals('H',b.top()); - assertEquals('A',c.top()); - assertEquals(0,d.top()); - } - - @Test - public void Vergleich(){ - assertEquals(a, c); - assertEquals(b, new CharCollection("CCEHHHLOSU")); - assertNotEquals(b, new CharCollection("CEHLOSU")); - assertEquals(d, new CharCollection("")); - } - - @Test - public void Ausgabe(){ - assertEquals(a.toString().length(),c.toString().length()); - assertEquals(b.toString().length(),new CharCollection("CCEHHHLOSU").toString().length()); - assertEquals("()",d.toString()); - - char[] aa = a.toString().toCharArray(); - char[] ca = c.toString().toCharArray(); - Arrays.sort(aa); - Arrays.sort(ca); - assertTrue(Arrays.equals(aa, ca)); - - char[] ba = b.toString().toCharArray(); - char[] b2a = "(C, C, H, H, H, L, O, E, S, U)".toCharArray(); - Arrays.sort(ba); - Arrays.sort(b2a); - assertTrue(Arrays.equals(ba, b2a)); - } - - @Test - public void Mindestens(){ - assertEquals(a.moreThan(1), new CharCollection("AAANN")); - assertEquals(a.moreThan(2), new CharCollection("AAA")); - assertEquals("(A, A, A)",a.moreThan(2).toString()); - assertEquals(b.moreThan(1), new CharCollection("CCHHH")); - assertEquals(b.moreThan(3), new CharCollection("")); - assertEquals("()",b.moreThan(3).toString()); - } - - @Test - public void Differenz(){ - assertEquals(a.except(new CharCollection("NASE")), new CharCollection("AAN")); - assertEquals(a.except(new CharCollection("KIWI")), new CharCollection("ANANAS")); - assertEquals(a.except(new CharCollection()), new CharCollection("ANANAS")); - assertEquals(a.except(new CharCollection("ANANAS")), new CharCollection()); - assertEquals(b.except(new CharCollection("CHHO")), new CharCollection("SCHULE")); - assertEquals(c.except(new CharCollection("HOSIANNA")), new CharCollection('A')); - assertEquals(d.except(new CharCollection("ABCD")), new CharCollection()); - } - - @Test - public void Untermenge(){ - assertTrue(a.isSubset(new CharCollection("ANANAS"))); - assertTrue(a.isSubset(new CharCollection("NASA"))); - assertTrue(a.isSubset(new CharCollection(""))); - assertFalse(a.isSubset(new CharCollection("NASE"))); - assertFalse(a.isSubset(new CharCollection("AAAA"))); - } -} +package de.joethei.hs.java2.tests; + +import de.joethei.hs.java2.praktikum.praktikum2.CharCollection; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; + +import static org.junit.Assert.*; + +public class CharCollectionTest2 { + + private CharCollection a, b, c, d; + + @Before + public void setUp() + { + a = new CharCollection('A', 'N', 'A', 'N', 'A', 'S'); + b = new CharCollection('H', 'O', 'C', 'H', 'S', 'C', 'H', 'U', 'L', 'E'); + c = new CharCollection("AAANNS"); + d = new CharCollection(); + } + + @Test + public void Laenge(){ + assertEquals(6,a.size()); + assertEquals(10,b.size()); + assertEquals(6,c.size()); + assertEquals(0,d.size()); + } + + @Test + public void Anzahl(){ + assertEquals(2,a.count('N')); + assertEquals(0,a.count('X')); + assertEquals(3,b.count('H')); + assertEquals(1,c.count('S')); + assertEquals(0,d.count('H')); + } + + @Test + public void Verschieden(){ + assertEquals(3,a.different()); + assertEquals(7,b.different()); + assertEquals(3,c.different()); + assertEquals(0,d.different()); + } + + @Test + public void Haeufigster(){ + assertEquals('A',a.top()); + assertEquals('H',b.top()); + assertEquals('A',c.top()); + assertEquals(0,d.top()); + } + + @Test + public void Vergleich(){ + assertEquals(a, c); + assertEquals(b, new CharCollection("CCEHHHLOSU")); + assertNotEquals(b, new CharCollection("CEHLOSU")); + assertEquals(d, new CharCollection("")); + } + + @Test + public void Ausgabe(){ + assertEquals(a.toString().length(),c.toString().length()); + assertEquals(b.toString().length(),new CharCollection("CCEHHHLOSU").toString().length()); + assertEquals("()",d.toString()); + + char[] aa = a.toString().toCharArray(); + char[] ca = c.toString().toCharArray(); + Arrays.sort(aa); + Arrays.sort(ca); + assertTrue(Arrays.equals(aa, ca)); + + char[] ba = b.toString().toCharArray(); + char[] b2a = "(C, C, H, H, H, L, O, E, S, U)".toCharArray(); + Arrays.sort(ba); + Arrays.sort(b2a); + assertTrue(Arrays.equals(ba, b2a)); + } + + @Test + public void Mindestens(){ + assertEquals(a.moreThan(1), new CharCollection("AAANN")); + assertEquals(a.moreThan(2), new CharCollection("AAA")); + assertEquals("(A, A, A)",a.moreThan(2).toString()); + assertEquals(b.moreThan(1), new CharCollection("CCHHH")); + assertEquals(b.moreThan(3), new CharCollection("")); + assertEquals("()",b.moreThan(3).toString()); + } + + @Test + public void Differenz(){ + assertEquals(a.except(new CharCollection("NASE")), new CharCollection("AAN")); + assertEquals(a.except(new CharCollection("KIWI")), new CharCollection("ANANAS")); + assertEquals(a.except(new CharCollection()), new CharCollection("ANANAS")); + assertEquals(a.except(new CharCollection("ANANAS")), new CharCollection()); + assertEquals(b.except(new CharCollection("CHHO")), new CharCollection("SCHULE")); + assertEquals(c.except(new CharCollection("HOSIANNA")), new CharCollection('A')); + assertEquals(d.except(new CharCollection("ABCD")), new CharCollection()); + } + + @Test + public void Untermenge(){ + assertTrue(a.isSubset(new CharCollection("ANANAS"))); + assertTrue(a.isSubset(new CharCollection("NASA"))); + assertTrue(a.isSubset(new CharCollection(""))); + assertFalse(a.isSubset(new CharCollection("NASE"))); + assertFalse(a.isSubset(new CharCollection("AAAA"))); + } +} diff --git a/src/test/java/de/joethei/hs/java2/tests/GrosseZahlTest.java b/src/test/java/de/joethei/hs/java2/tests/GrosseZahlTest.java index c3ec885..85563d3 100644 --- a/src/test/java/de/joethei/hs/java2/tests/GrosseZahlTest.java +++ b/src/test/java/de/joethei/hs/java2/tests/GrosseZahlTest.java @@ -1,86 +1,86 @@ -package de.joethei.hs.java2.tests; - -import de.joethei.hs.java2.praktikum.praktikum1.GrosseZahl; -import org.junit.Test; - -import static org.junit.Assert.*; - -public class GrosseZahlTest { - - @Test - public void constructors() { - assertEquals(new GrosseZahl("1456"), new GrosseZahl(1456)); - assertNotEquals(new GrosseZahl("1234"), new GrosseZahl(1233)); - assertNotEquals(new GrosseZahl(14), 14); - } - - @Test - public void length() { - assertEquals(4, new GrosseZahl("1234").length()); - assertNotEquals(5, new GrosseZahl(1234).length()); - } - - @Test - public void numberAt() { - assertEquals(5, new GrosseZahl("125").numberAt(2)); - assertNotEquals(5, new GrosseZahl(125).numberAt(1)); - } - - - @Test - public void add() { - assertEquals(new GrosseZahl(42), new GrosseZahl("40").add(new GrosseZahl(2))); - assertEquals(new GrosseZahl("42"), new GrosseZahl(40).add(new GrosseZahl(2))); - assertNotEquals(new GrosseZahl(43), new GrosseZahl("40").add(new GrosseZahl(2))); - assertEquals(new GrosseZahl(200), new GrosseZahl(190).add(new GrosseZahl("10"))); - assertEquals(new GrosseZahl(200), new GrosseZahl(10).add(new GrosseZahl(190))); - assertEquals(new GrosseZahl(400), new GrosseZahl(50).add(new GrosseZahl(350))); - assertEquals(new GrosseZahl(4000), new GrosseZahl(500).add(new GrosseZahl(3500))); - assertEquals(new GrosseZahl(200), new GrosseZahl("198").add(new GrosseZahl(2))); - } - - @Test - public void sub() { - assertEquals(new GrosseZahl(42), new GrosseZahl(100).sub(new GrosseZahl(58))); - assertNotEquals(new GrosseZahl(43), new GrosseZahl(100).sub(new GrosseZahl(58))); - assertEquals(new GrosseZahl(100), new GrosseZahl(150).sub(new GrosseZahl(50))); - assertEquals(new GrosseZahl(0), new GrosseZahl(10).sub(new GrosseZahl("10"))); - assertEquals(new GrosseZahl(0), new GrosseZahl(10).sub(new GrosseZahl(15))); - } - - @Test - public void mult() { - assertEquals(new GrosseZahl(15), new GrosseZahl("5").mult(new GrosseZahl(3))); - assertNotEquals(new GrosseZahl("15"), new GrosseZahl("4").mult(new GrosseZahl(3))); - assertEquals(new GrosseZahl(90000), new GrosseZahl(9).mult(new GrosseZahl(10000))); - } - - @Test - public void less() { - assertTrue(new GrosseZahl("1234").less(new GrosseZahl("12345"))); - assertFalse(new GrosseZahl("12345").less(new GrosseZahl("1234"))); - assertFalse(new GrosseZahl("1234").less(new GrosseZahl("1234"))); - assertFalse(new GrosseZahl("1234").less(new GrosseZahl("1233"))); - assertTrue(new GrosseZahl(1233).less(new GrosseZahl(1234))); - } - - @Test - public void toStringTest() { - assertEquals("45", new GrosseZahl(45).toString()); - assertEquals("45", new GrosseZahl("45").toString()); - } - - @Test - public void ggT() { - assertEquals(new GrosseZahl(3), new GrosseZahl(45).ggT(new GrosseZahl(21))); - assertEquals(new GrosseZahl(70), new GrosseZahl(1400).ggT(new GrosseZahl(210))); - assertNotEquals(new GrosseZahl(2), new GrosseZahl("7").ggT(new GrosseZahl(13))); - } - - @Test(expected = IllegalArgumentException.class) - public void wrongInput() { - new GrosseZahl("42B"); - new GrosseZahl("42/"); - } - +package de.joethei.hs.java2.tests; + +import de.joethei.hs.java2.praktikum.praktikum1.GrosseZahl; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class GrosseZahlTest { + + @Test + public void constructors() { + assertEquals(new GrosseZahl("1456"), new GrosseZahl(1456)); + assertNotEquals(new GrosseZahl("1234"), new GrosseZahl(1233)); + assertNotEquals(new GrosseZahl(14), 14); + } + + @Test + public void length() { + assertEquals(4, new GrosseZahl("1234").length()); + assertNotEquals(5, new GrosseZahl(1234).length()); + } + + @Test + public void numberAt() { + assertEquals(5, new GrosseZahl("125").numberAt(2)); + assertNotEquals(5, new GrosseZahl(125).numberAt(1)); + } + + + @Test + public void add() { + assertEquals(new GrosseZahl(42), new GrosseZahl("40").add(new GrosseZahl(2))); + assertEquals(new GrosseZahl("42"), new GrosseZahl(40).add(new GrosseZahl(2))); + assertNotEquals(new GrosseZahl(43), new GrosseZahl("40").add(new GrosseZahl(2))); + assertEquals(new GrosseZahl(200), new GrosseZahl(190).add(new GrosseZahl("10"))); + assertEquals(new GrosseZahl(200), new GrosseZahl(10).add(new GrosseZahl(190))); + assertEquals(new GrosseZahl(400), new GrosseZahl(50).add(new GrosseZahl(350))); + assertEquals(new GrosseZahl(4000), new GrosseZahl(500).add(new GrosseZahl(3500))); + assertEquals(new GrosseZahl(200), new GrosseZahl("198").add(new GrosseZahl(2))); + } + + @Test + public void sub() { + assertEquals(new GrosseZahl(42), new GrosseZahl(100).sub(new GrosseZahl(58))); + assertNotEquals(new GrosseZahl(43), new GrosseZahl(100).sub(new GrosseZahl(58))); + assertEquals(new GrosseZahl(100), new GrosseZahl(150).sub(new GrosseZahl(50))); + assertEquals(new GrosseZahl(0), new GrosseZahl(10).sub(new GrosseZahl("10"))); + assertEquals(new GrosseZahl(0), new GrosseZahl(10).sub(new GrosseZahl(15))); + } + + @Test + public void mult() { + assertEquals(new GrosseZahl(15), new GrosseZahl("5").mult(new GrosseZahl(3))); + assertNotEquals(new GrosseZahl("15"), new GrosseZahl("4").mult(new GrosseZahl(3))); + assertEquals(new GrosseZahl(90000), new GrosseZahl(9).mult(new GrosseZahl(10000))); + } + + @Test + public void less() { + assertTrue(new GrosseZahl("1234").less(new GrosseZahl("12345"))); + assertFalse(new GrosseZahl("12345").less(new GrosseZahl("1234"))); + assertFalse(new GrosseZahl("1234").less(new GrosseZahl("1234"))); + assertFalse(new GrosseZahl("1234").less(new GrosseZahl("1233"))); + assertTrue(new GrosseZahl(1233).less(new GrosseZahl(1234))); + } + + @Test + public void toStringTest() { + assertEquals("45", new GrosseZahl(45).toString()); + assertEquals("45", new GrosseZahl("45").toString()); + } + + @Test + public void ggT() { + assertEquals(new GrosseZahl(3), new GrosseZahl(45).ggT(new GrosseZahl(21))); + assertEquals(new GrosseZahl(70), new GrosseZahl(1400).ggT(new GrosseZahl(210))); + assertNotEquals(new GrosseZahl(2), new GrosseZahl("7").ggT(new GrosseZahl(13))); + } + + @Test(expected = IllegalArgumentException.class) + public void wrongInput() { + new GrosseZahl("42B"); + new GrosseZahl("42/"); + } + } \ No newline at end of file diff --git a/src/test/java/de/joethei/hs/java2/tests/GrosseZahlTest2.java b/src/test/java/de/joethei/hs/java2/tests/GrosseZahlTest2.java index 56f34e1..0dedf26 100644 --- a/src/test/java/de/joethei/hs/java2/tests/GrosseZahlTest2.java +++ b/src/test/java/de/joethei/hs/java2/tests/GrosseZahlTest2.java @@ -1,152 +1,152 @@ -package de.joethei.hs.java2.tests; - -import de.joethei.hs.java2.praktikum.praktikum1.GrosseZahl; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class GrosseZahlTest2 { - - private GrosseZahl i0; - private GrosseZahl s0; - private GrosseZahl i1; - private GrosseZahl s1; - private GrosseZahl i55; - private GrosseZahl s55; - private GrosseZahl i60; - private GrosseZahl s60; - private GrosseZahl i99; - private GrosseZahl s99; - private GrosseZahl i100; - private GrosseZahl s100; - private GrosseZahl i12345; - private GrosseZahl s12345; - private GrosseZahl s12345678901234567890; - private GrosseZahl s10345678901234567891; - private GrosseZahl i283935; - private GrosseZahl s2736; - private GrosseZahl s2737; - - - @Before - public void setUp() { - i0 = new GrosseZahl(0); - s0 = new GrosseZahl("0"); - i1 = new GrosseZahl(1); - s1 = new GrosseZahl("1"); - i55 = new GrosseZahl(55); - s55 = new GrosseZahl("55"); - i60 = new GrosseZahl(60); - s60 = new GrosseZahl("60"); - i99 = new GrosseZahl(99); - s99 = new GrosseZahl("99"); - i100 = new GrosseZahl(100); - s100 = new GrosseZahl("100"); - i12345 = new GrosseZahl(12345); - s12345 = new GrosseZahl("12345"); - s12345678901234567890 = new GrosseZahl("12345678901234567890"); - s10345678901234567891 = new GrosseZahl("10345678901234567891"); - i283935 = new GrosseZahl("283935"); - s2736 = new GrosseZahl("2736"); - s2737 = new GrosseZahl("2737"); - } - - @Test - public void testKonstruktor() { - assertEquals("0", i0.toString()); - assertEquals("0", s0.toString()); - assertEquals("1", i1.toString()); - assertEquals("1", s1.toString()); - assertEquals("55", i55.toString()); - assertEquals("55", s55.toString()); - assertEquals("60", i60.toString()); - assertEquals("60", s60.toString()); - assertEquals("99", i99.toString()); - assertEquals("99", s99.toString()); - assertEquals("100", i100.toString()); - assertEquals("100", s100.toString()); - assertEquals("12345", i12345.toString()); - assertEquals("12345", s12345.toString()); - assertEquals("12345678901234567890", s12345678901234567890.toString()); - assertEquals("10345678901234567891", s10345678901234567891.toString()); - - } - - @Test - public void testLess() { - assertTrue(!i0.less(s0)); - assertTrue(i0.less(i1)); - assertTrue(!i1.less(i0)); - - assertTrue(!i55.less(s55)); - assertTrue(i55.less(i60)); - assertTrue(!i60.less(i55)); - - assertTrue(!i99.less(s99)); - assertTrue(i99.less(i100)); - assertTrue(!i100.less(i99)); - - assertTrue(!s12345678901234567890.less(s12345678901234567890)); - assertTrue(s10345678901234567891.less(s12345678901234567890)); - assertTrue(!s12345678901234567890.less(s10345678901234567891)); - } - - @Test - public void testAdd() { - assertEquals("0",i0.add(i0).toString()); - assertEquals("1",i1.add(i0).toString()); - assertEquals("1",i0.add(i1).toString()); - assertEquals("2",i1.add(s1).toString()); - - assertEquals("115",i55.add(s60).toString()); - assertEquals("115",i60.add(s55).toString()); - - assertEquals("115",s55.add(i60).toString()); - assertEquals("115",s60.add(i55).toString()); - - assertEquals("12444",i99.add(i12345).toString()); - assertEquals("12444",i12345.add(i99).toString()); - - assertEquals("22691357802469135781",s12345678901234567890.add(s10345678901234567891).toString()); - assertEquals("22691357802469135781",s10345678901234567891.add(s12345678901234567890).toString()); - - GrosseZahl z = new GrosseZahl(0); - for (int i=1; i<=125; i++) - z=z.add(i99); - assertEquals("12375",z.toString()); - } - - @Test - public void testMult() { - assertEquals("0",i0.mult(i0).toString()); - assertEquals("1",i1.mult(i1).toString()); - - assertEquals("3300",i55.mult(s60).toString()); - assertEquals("3300",i60.mult(s55).toString()); - - assertEquals("3300",s55.mult(i60).toString()); - assertEquals("3300",s60.mult(i55).toString()); - - assertEquals("1222155",s12345.mult(s99).toString()); - assertEquals("1222155",i12345.mult(i99).toString()); - - assertEquals("152407406035740740602050",s12345678901234567890.mult(s12345).toString()); - assertEquals("152407406035740740602050",s12345678901234567890.mult(i12345).toString()); - - GrosseZahl z = new GrosseZahl(1); - for (int i=1; i<=9; i++) - z=z.mult(i99); - assertEquals("913517247483640899",z.toString()); - } - - @Test - public void testGGT() { - assertEquals("23",i283935.ggT(s2737).toString()); - assertEquals("23",s2737.ggT(i283935).toString()); - - assertEquals("2737",s2737.ggT(s2737).toString()); - assertEquals("1",s2736.ggT(s2737).toString()); - } -} +package de.joethei.hs.java2.tests; + +import de.joethei.hs.java2.praktikum.praktikum1.GrosseZahl; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class GrosseZahlTest2 { + + private GrosseZahl i0; + private GrosseZahl s0; + private GrosseZahl i1; + private GrosseZahl s1; + private GrosseZahl i55; + private GrosseZahl s55; + private GrosseZahl i60; + private GrosseZahl s60; + private GrosseZahl i99; + private GrosseZahl s99; + private GrosseZahl i100; + private GrosseZahl s100; + private GrosseZahl i12345; + private GrosseZahl s12345; + private GrosseZahl s12345678901234567890; + private GrosseZahl s10345678901234567891; + private GrosseZahl i283935; + private GrosseZahl s2736; + private GrosseZahl s2737; + + + @Before + public void setUp() { + i0 = new GrosseZahl(0); + s0 = new GrosseZahl("0"); + i1 = new GrosseZahl(1); + s1 = new GrosseZahl("1"); + i55 = new GrosseZahl(55); + s55 = new GrosseZahl("55"); + i60 = new GrosseZahl(60); + s60 = new GrosseZahl("60"); + i99 = new GrosseZahl(99); + s99 = new GrosseZahl("99"); + i100 = new GrosseZahl(100); + s100 = new GrosseZahl("100"); + i12345 = new GrosseZahl(12345); + s12345 = new GrosseZahl("12345"); + s12345678901234567890 = new GrosseZahl("12345678901234567890"); + s10345678901234567891 = new GrosseZahl("10345678901234567891"); + i283935 = new GrosseZahl("283935"); + s2736 = new GrosseZahl("2736"); + s2737 = new GrosseZahl("2737"); + } + + @Test + public void testKonstruktor() { + assertEquals("0", i0.toString()); + assertEquals("0", s0.toString()); + assertEquals("1", i1.toString()); + assertEquals("1", s1.toString()); + assertEquals("55", i55.toString()); + assertEquals("55", s55.toString()); + assertEquals("60", i60.toString()); + assertEquals("60", s60.toString()); + assertEquals("99", i99.toString()); + assertEquals("99", s99.toString()); + assertEquals("100", i100.toString()); + assertEquals("100", s100.toString()); + assertEquals("12345", i12345.toString()); + assertEquals("12345", s12345.toString()); + assertEquals("12345678901234567890", s12345678901234567890.toString()); + assertEquals("10345678901234567891", s10345678901234567891.toString()); + + } + + @Test + public void testLess() { + assertTrue(!i0.less(s0)); + assertTrue(i0.less(i1)); + assertTrue(!i1.less(i0)); + + assertTrue(!i55.less(s55)); + assertTrue(i55.less(i60)); + assertTrue(!i60.less(i55)); + + assertTrue(!i99.less(s99)); + assertTrue(i99.less(i100)); + assertTrue(!i100.less(i99)); + + assertTrue(!s12345678901234567890.less(s12345678901234567890)); + assertTrue(s10345678901234567891.less(s12345678901234567890)); + assertTrue(!s12345678901234567890.less(s10345678901234567891)); + } + + @Test + public void testAdd() { + assertEquals("0",i0.add(i0).toString()); + assertEquals("1",i1.add(i0).toString()); + assertEquals("1",i0.add(i1).toString()); + assertEquals("2",i1.add(s1).toString()); + + assertEquals("115",i55.add(s60).toString()); + assertEquals("115",i60.add(s55).toString()); + + assertEquals("115",s55.add(i60).toString()); + assertEquals("115",s60.add(i55).toString()); + + assertEquals("12444",i99.add(i12345).toString()); + assertEquals("12444",i12345.add(i99).toString()); + + assertEquals("22691357802469135781",s12345678901234567890.add(s10345678901234567891).toString()); + assertEquals("22691357802469135781",s10345678901234567891.add(s12345678901234567890).toString()); + + GrosseZahl z = new GrosseZahl(0); + for (int i=1; i<=125; i++) + z=z.add(i99); + assertEquals("12375",z.toString()); + } + + @Test + public void testMult() { + assertEquals("0",i0.mult(i0).toString()); + assertEquals("1",i1.mult(i1).toString()); + + assertEquals("3300",i55.mult(s60).toString()); + assertEquals("3300",i60.mult(s55).toString()); + + assertEquals("3300",s55.mult(i60).toString()); + assertEquals("3300",s60.mult(i55).toString()); + + assertEquals("1222155",s12345.mult(s99).toString()); + assertEquals("1222155",i12345.mult(i99).toString()); + + assertEquals("152407406035740740602050",s12345678901234567890.mult(s12345).toString()); + assertEquals("152407406035740740602050",s12345678901234567890.mult(i12345).toString()); + + GrosseZahl z = new GrosseZahl(1); + for (int i=1; i<=9; i++) + z=z.mult(i99); + assertEquals("913517247483640899",z.toString()); + } + + @Test + public void testGGT() { + assertEquals("23",i283935.ggT(s2737).toString()); + assertEquals("23",s2737.ggT(i283935).toString()); + + assertEquals("2737",s2737.ggT(s2737).toString()); + assertEquals("1",s2736.ggT(s2737).toString()); + } +} diff --git a/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest.java b/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest.java index edb2012..d16ac82 100644 --- a/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest.java +++ b/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest.java @@ -1,99 +1,99 @@ -package de.joethei.hs.java2.tests; - -import de.joethei.hs.java2.praktikum.praktikum4.KlausurenServer; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.*; -import java.net.Socket; - -import static org.junit.Assert.assertEquals; - -@RunWith(OrderedRunner.class) -public class KlausurenServerTest { - - private static KlausurenServer server; - - @BeforeClass - public static void before() throws InterruptedException { - server = new KlausurenServer(6767); - Thread.sleep(500L); - } - - @Test - @Order(order = 1) - public void test() { - sendRequest("delall"); - assertEquals("Hallo Welt", sendRequest("test")); - assertEquals("0", sendRequest("getall")); - } - - @Test(timeout = 120L) - @Order(order = 2) - public void put() { - assertEquals("1 ", sendRequest("put max@maier 6, 5")); - assertEquals("1 5,6", sendRequest("put max@maier 7,8")); - assertEquals("0", sendRequest("put max@maier")); - } - - @Test(timeout = 60L) - @Order(order = 3) - public void getall() { - assertEquals("1 ", sendRequest("put max@baum 5, 6")); - assertEquals("1 [5,6],[7,8]", sendRequest("getall")); - } - - @Test(timeout = 500L) - @Order(order = 4) - public void get() { - assertEquals("1 7,8", sendRequest("get max@maier")); - assertEquals("0", sendRequest("get max@müller")); - assertEquals("0", sendRequest("get")); - assertEquals("0", sendRequest("get max@müller 42")); - } - - @Test(timeout = 500L) - @Order(order = 5) - public void del() { - assertEquals("0", sendRequest("del max@maier baum")); - assertEquals("1 7,8", sendRequest("del max@maier")); - assertEquals("0", sendRequest("del max@maier")); - assertEquals("0", sendRequest("get max@maier")); - } - @Test(timeout = 2000L) - @Order(order = 6) - public void saved() throws InterruptedException { - assertEquals("1 ", sendRequest("put max@maier 5, 6, 7, 8")); - assertEquals("1", sendRequest("stop")); - //Thread.sleep(1000L); - server = new KlausurenServer(6768); - Thread.sleep(100L); - assertEquals("1 [5,6,7,8]", sendRequest("getall", 6768)); - assertEquals("1 5,6,7,8", sendRequest("del max@maier", 6768)); - assertEquals("1 5,6", sendRequest("del max@baum", 6768)); - - } - - private String sendRequest(String command, int port) { - try { - Socket socket = new Socket("localhost", port); - BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); - writer.write(command); - writer.newLine(); - writer.flush(); - String result = reader.readLine(); - socket.close(); - return result; - } catch (IOException e) { - e.printStackTrace(); - } - - return null; - } - - private String sendRequest(String command) { - return sendRequest(command, 6767); - } +package de.joethei.hs.java2.tests; + +import de.joethei.hs.java2.praktikum.praktikum4.KlausurenServer; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.*; +import java.net.Socket; + +import static org.junit.Assert.assertEquals; + +@RunWith(OrderedRunner.class) +public class KlausurenServerTest { + + private static KlausurenServer server; + + @BeforeClass + public static void before() throws InterruptedException { + server = new KlausurenServer(6767); + Thread.sleep(500L); + } + + @Test + @Order(order = 1) + public void test() { + sendRequest("delall"); + assertEquals("Hallo Welt", sendRequest("test")); + assertEquals("0", sendRequest("getall")); + } + + @Test(timeout = 120L) + @Order(order = 2) + public void put() { + assertEquals("1 ", sendRequest("put max@maier 6, 5")); + assertEquals("1 5,6", sendRequest("put max@maier 7,8")); + assertEquals("0", sendRequest("put max@maier")); + } + + @Test(timeout = 60L) + @Order(order = 3) + public void getall() { + assertEquals("1 ", sendRequest("put max@baum 5, 6")); + assertEquals("1 [5,6],[7,8]", sendRequest("getall")); + } + + @Test(timeout = 500L) + @Order(order = 4) + public void get() { + assertEquals("1 7,8", sendRequest("get max@maier")); + assertEquals("0", sendRequest("get max@müller")); + assertEquals("0", sendRequest("get")); + assertEquals("0", sendRequest("get max@müller 42")); + } + + @Test(timeout = 500L) + @Order(order = 5) + public void del() { + assertEquals("0", sendRequest("del max@maier baum")); + assertEquals("1 7,8", sendRequest("del max@maier")); + assertEquals("0", sendRequest("del max@maier")); + assertEquals("0", sendRequest("get max@maier")); + } + @Test(timeout = 2000L) + @Order(order = 6) + public void saved() throws InterruptedException { + assertEquals("1 ", sendRequest("put max@maier 5, 6, 7, 8")); + assertEquals("1", sendRequest("stop")); + //Thread.sleep(1000L); + server = new KlausurenServer(6768); + Thread.sleep(100L); + assertEquals("1 [5,6,7,8]", sendRequest("getall", 6768)); + assertEquals("1 5,6,7,8", sendRequest("del max@maier", 6768)); + assertEquals("1 5,6", sendRequest("del max@baum", 6768)); + + } + + private String sendRequest(String command, int port) { + try { + Socket socket = new Socket("localhost", port); + BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); + writer.write(command); + writer.newLine(); + writer.flush(); + String result = reader.readLine(); + socket.close(); + return result; + } catch (IOException e) { + e.printStackTrace(); + } + + return null; + } + + private String sendRequest(String command) { + return sendRequest(command, 6767); + } } \ No newline at end of file diff --git a/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest2.java b/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest2.java index 4f32d90..c367f47 100644 --- a/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest2.java +++ b/src/test/java/de/joethei/hs/java2/tests/KlausurenServerTest2.java @@ -1,199 +1,199 @@ -package de.joethei.hs.java2.tests; - -import de.joethei.hs.java2.praktikum.praktikum4.KlausurenServer; -import org.junit.Before; -import org.junit.Test; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.net.Socket; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class KlausurenServerTest2 { - - PrintWriter ausSo; - BufferedReader einSo; - Socket so; - String line; - - public void opensocket() throws IOException { - so = new Socket("localhost", 6769); //Port 6769 wird erwartet! - ausSo = new PrintWriter(so.getOutputStream(), true); - einSo = new BufferedReader(new InputStreamReader(so.getInputStream())); - } - - public void closesocket() throws IOException { - so.close(); - } - - @Before - public void setUp() throws IOException { - new KlausurenServer(6769); - System.out.println("INITIALISIERUNG"); - opensocket(); - ausSo.println("del mail1"); - line = einSo.readLine(); - closesocket(); - opensocket(); - ausSo.println("del mail2"); - line = einSo.readLine(); - closesocket(); - opensocket(); - ausSo.println("del mail3"); - line = einSo.readLine(); - closesocket(); - opensocket(); - ausSo.println("del mail4"); - line = einSo.readLine(); - closesocket(); - opensocket(); - ausSo.println("del mail5"); - line = einSo.readLine(); - closesocket(); - System.out.println("INITIALISIERUNG OK"+"\n"); - } - - @Test //alles in einer Test-Methode, weil die richtige Reihenfolge sonst nicht gewährleistet ist! - public void all() throws IOException { - System.out.println("TEST: del mail1"); - opensocket(); - ausSo.println("del mail1"); - line = einSo.readLine(); - //System.out.println(line); - assertEquals(line,"0"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: put mail2 22,23,24"); - opensocket(); - ausSo.println("put mail2 22,23,24"); - line = einSo.readLine(); - //System.out.println(line); - assertTrue(line.equals("1 ")||line.equals("1")); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: put mail2 33,34,35"); - opensocket(); - ausSo.println("put mail2 33,34,35"); - line = einSo.readLine(); - //System.out.println(line); - assertEquals(line,"1 22,23,24"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: get mail2"); - opensocket(); - ausSo.println("get mail2"); - line = einSo.readLine(); - //System.out.println(line); - assertEquals(line,"1 33,34,35"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: put mail3 44,45,46"); - opensocket(); - ausSo.println("put mail3 44,45,46"); - line = einSo.readLine(); - //System.out.println(line); - assertTrue(line.equals("1 ")||line.equals("1")); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: put mail4 44,45"); - opensocket(); - ausSo.println("put mail5 44,45"); - line = einSo.readLine(); - //System.out.println(line); - assertTrue(line.equals("1 ")||line.equals("1")); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: getall"); - opensocket(); - ausSo.println("getall"); - line = einSo.readLine(); - //System.out.println(line); - assertTrue(line.equals("1 [33,34,35],[44,45,46]")||line.equals("1 [44,45,46],[33,34,35]")); -// assertEquals(line,"1 [33,34,35],[44,45,46]"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: del mail2"); - opensocket(); - ausSo.println("del mail2"); - line = einSo.readLine(); - //System.out.println(line); - assertEquals(line,"1 33,34,35"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: del mail3"); - opensocket(); - ausSo.println("del mail3"); - line = einSo.readLine(); - //System.out.println(line); - assertEquals(line,"1 44,45,46"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: get mail2"); - opensocket(); - ausSo.println("get mail2"); - line = einSo.readLine(); - //System.out.println(line); - assertEquals(line,"0"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: getall"); - opensocket(); - ausSo.println("getall"); - line = einSo.readLine(); - //System.out.println(line); - assertEquals(line,"1 [44,45]"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: put mail2 45,46"); - opensocket(); - ausSo.println("put mail2 45,46"); - line = einSo.readLine(); - //System.out.println(line); - assertTrue(line.equals("1 ")||line.equals("1")); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: put mail3 44,46"); - opensocket(); - ausSo.println("put mail3 44,46"); - line = einSo.readLine(); - //System.out.println(line); - assertTrue(line.equals("1 ")||line.equals("1")); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: getall"); - opensocket(); - ausSo.println("getall"); - line = einSo.readLine(); - //System.out.println(line); - assertTrue(line.equals("1 [44,45],[44,46],[45,46]")||line.equals("1 [44,45],[45,46],[44,46]")||line.equals("1 [44,46],[44,45],[45,46]")||line.equals("1 [44,46],[45,46],[44,45]")||line.equals("1 [45,46],[44,45],[44,46]")||line.equals("1 [45,46],[44,46],[44,45]")||line.equals("1 [44,45,46]")); -// assertEquals(line,"1 [44,45],[44,46],[45,46]"); - closesocket(); - System.out.println("TEST: OK"+"\n"); - - System.out.println("TEST: stop"); - opensocket(); - ausSo.println("stop"); - line = einSo.readLine(); - //System.out.println(line); - assertTrue(line.equals("1 ")||line.equals("1")); - closesocket(); - System.out.println("TEST: OK"+"\n"); - } +package de.joethei.hs.java2.tests; + +import de.joethei.hs.java2.praktikum.praktikum4.KlausurenServer; +import org.junit.Before; +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class KlausurenServerTest2 { + + PrintWriter ausSo; + BufferedReader einSo; + Socket so; + String line; + + public void opensocket() throws IOException { + so = new Socket("localhost", 6769); //Port 6769 wird erwartet! + ausSo = new PrintWriter(so.getOutputStream(), true); + einSo = new BufferedReader(new InputStreamReader(so.getInputStream())); + } + + public void closesocket() throws IOException { + so.close(); + } + + @Before + public void setUp() throws IOException { + new KlausurenServer(6769); + System.out.println("INITIALISIERUNG"); + opensocket(); + ausSo.println("del mail1"); + line = einSo.readLine(); + closesocket(); + opensocket(); + ausSo.println("del mail2"); + line = einSo.readLine(); + closesocket(); + opensocket(); + ausSo.println("del mail3"); + line = einSo.readLine(); + closesocket(); + opensocket(); + ausSo.println("del mail4"); + line = einSo.readLine(); + closesocket(); + opensocket(); + ausSo.println("del mail5"); + line = einSo.readLine(); + closesocket(); + System.out.println("INITIALISIERUNG OK"+"\n"); + } + + @Test //alles in einer Test-Methode, weil die richtige Reihenfolge sonst nicht gewährleistet ist! + public void all() throws IOException { + System.out.println("TEST: del mail1"); + opensocket(); + ausSo.println("del mail1"); + line = einSo.readLine(); + //System.out.println(line); + assertEquals(line,"0"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: put mail2 22,23,24"); + opensocket(); + ausSo.println("put mail2 22,23,24"); + line = einSo.readLine(); + //System.out.println(line); + assertTrue(line.equals("1 ")||line.equals("1")); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: put mail2 33,34,35"); + opensocket(); + ausSo.println("put mail2 33,34,35"); + line = einSo.readLine(); + //System.out.println(line); + assertEquals(line,"1 22,23,24"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: get mail2"); + opensocket(); + ausSo.println("get mail2"); + line = einSo.readLine(); + //System.out.println(line); + assertEquals(line,"1 33,34,35"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: put mail3 44,45,46"); + opensocket(); + ausSo.println("put mail3 44,45,46"); + line = einSo.readLine(); + //System.out.println(line); + assertTrue(line.equals("1 ")||line.equals("1")); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: put mail4 44,45"); + opensocket(); + ausSo.println("put mail5 44,45"); + line = einSo.readLine(); + //System.out.println(line); + assertTrue(line.equals("1 ")||line.equals("1")); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: getall"); + opensocket(); + ausSo.println("getall"); + line = einSo.readLine(); + //System.out.println(line); + assertTrue(line.equals("1 [33,34,35],[44,45,46]")||line.equals("1 [44,45,46],[33,34,35]")); +// assertEquals(line,"1 [33,34,35],[44,45,46]"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: del mail2"); + opensocket(); + ausSo.println("del mail2"); + line = einSo.readLine(); + //System.out.println(line); + assertEquals(line,"1 33,34,35"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: del mail3"); + opensocket(); + ausSo.println("del mail3"); + line = einSo.readLine(); + //System.out.println(line); + assertEquals(line,"1 44,45,46"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: get mail2"); + opensocket(); + ausSo.println("get mail2"); + line = einSo.readLine(); + //System.out.println(line); + assertEquals(line,"0"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: getall"); + opensocket(); + ausSo.println("getall"); + line = einSo.readLine(); + //System.out.println(line); + assertEquals(line,"1 [44,45]"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: put mail2 45,46"); + opensocket(); + ausSo.println("put mail2 45,46"); + line = einSo.readLine(); + //System.out.println(line); + assertTrue(line.equals("1 ")||line.equals("1")); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: put mail3 44,46"); + opensocket(); + ausSo.println("put mail3 44,46"); + line = einSo.readLine(); + //System.out.println(line); + assertTrue(line.equals("1 ")||line.equals("1")); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: getall"); + opensocket(); + ausSo.println("getall"); + line = einSo.readLine(); + //System.out.println(line); + assertTrue(line.equals("1 [44,45],[44,46],[45,46]")||line.equals("1 [44,45],[45,46],[44,46]")||line.equals("1 [44,46],[44,45],[45,46]")||line.equals("1 [44,46],[45,46],[44,45]")||line.equals("1 [45,46],[44,45],[44,46]")||line.equals("1 [45,46],[44,46],[44,45]")||line.equals("1 [44,45,46]")); +// assertEquals(line,"1 [44,45],[44,46],[45,46]"); + closesocket(); + System.out.println("TEST: OK"+"\n"); + + System.out.println("TEST: stop"); + opensocket(); + ausSo.println("stop"); + line = einSo.readLine(); + //System.out.println(line); + assertTrue(line.equals("1 ")||line.equals("1")); + closesocket(); + System.out.println("TEST: OK"+"\n"); + } } \ No newline at end of file diff --git a/src/test/java/de/joethei/hs/java2/tests/Order.java b/src/test/java/de/joethei/hs/java2/tests/Order.java index 6406428..96a4cab 100644 --- a/src/test/java/de/joethei/hs/java2/tests/Order.java +++ b/src/test/java/de/joethei/hs/java2/tests/Order.java @@ -1,12 +1,12 @@ -package de.joethei.hs.java2.tests; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.METHOD}) -public @interface Order { - public int order(); +package de.joethei.hs.java2.tests; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.METHOD}) +public @interface Order { + public int order(); } \ No newline at end of file diff --git a/src/test/java/de/joethei/hs/java2/tests/OrderedRunner.java b/src/test/java/de/joethei/hs/java2/tests/OrderedRunner.java index eb12eaf..452c5a5 100644 --- a/src/test/java/de/joethei/hs/java2/tests/OrderedRunner.java +++ b/src/test/java/de/joethei/hs/java2/tests/OrderedRunner.java @@ -1,31 +1,31 @@ -package de.joethei.hs.java2.tests; - -import org.junit.runners.BlockJUnit4ClassRunner; -import org.junit.runners.model.FrameworkMethod; -import org.junit.runners.model.InitializationError; - -import java.util.ArrayList; -import java.util.List; - -public class OrderedRunner extends BlockJUnit4ClassRunner { - - public OrderedRunner(Class clazz) throws InitializationError { - super(clazz); - } - - @Override - protected List computeTestMethods() { - List list = super.computeTestMethods(); - List copy = new ArrayList<>(list); - copy.sort((f1, f2) -> { - Order o1 = f1.getAnnotation(Order.class); - Order o2 = f2.getAnnotation(Order.class); - - if (o1 == null || o2 == null) - return -1; - - return o1.order() - o2.order(); - }); - return copy; - } +package de.joethei.hs.java2.tests; + +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.InitializationError; + +import java.util.ArrayList; +import java.util.List; + +public class OrderedRunner extends BlockJUnit4ClassRunner { + + public OrderedRunner(Class clazz) throws InitializationError { + super(clazz); + } + + @Override + protected List computeTestMethods() { + List list = super.computeTestMethods(); + List copy = new ArrayList<>(list); + copy.sort((f1, f2) -> { + Order o1 = f1.getAnnotation(Order.class); + Order o2 = f2.getAnnotation(Order.class); + + if (o1 == null || o2 == null) + return -1; + + return o1.order() - o2.order(); + }); + return copy; + } } \ No newline at end of file diff --git a/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest.java b/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest.java index 794344c..a91dcbc 100644 --- a/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest.java +++ b/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest.java @@ -1,135 +1,135 @@ -package de.joethei.hs.java2.tests; - -import de.joethei.hs.java2.praktikum.praktikum3.TextFileFormatException; -import de.joethei.hs.java2.praktikum.praktikum3.Vorlesung; -import de.joethei.hs.java2.praktikum.praktikum3.Vorlesungsverzeichnis; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; -import java.util.*; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; - -public class VorlesungsverzeichnisTest { - - private Vorlesungsverzeichnis vorlesungsverzeichnis; - - @Before - public void before() { - try { - vorlesungsverzeichnis = new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen.txt")).getFile()); - } catch (IOException | TextFileFormatException e) { - e.printStackTrace(); - } - - } - - @Test(expected = IOException.class) - public void constructorIOException() throws IOException, TextFileFormatException { - new Vorlesungsverzeichnis("HalloWelt"); - } - - @Test(expected = TextFileFormatException.class) - public void constructorTextFileFormatException() throws IOException, TextFileFormatException { - new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen-format.txt")).getFile()); - } - - @Test(expected = TextFileFormatException.class) - public void constructorNumberFormatException() throws IOException, TextFileFormatException { - new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen-number.txt")).getFile()); - } - - - @Test - public void titles() { - List titles = new ArrayList<>(); - titles.add("Algorithmen und Datenstrukturen"); - titles.add("Audio-/Videotechnik"); - titles.add("Internet-Technologien"); - titles.add("Java 2"); - titles.add("Mathematik 2"); - titles.add("Rechnerarchitekturen"); - - assertEquals(vorlesungsverzeichnis.titles(), titles); - - titles.add("Hallo Welt"); - assertNotEquals(vorlesungsverzeichnis.titles(), titles); - } - - @Test - public void workaholics() { - Set set = new HashSet<>(); - set.add("von Coelln"); - set.add("Rump"); - assertEquals(vorlesungsverzeichnis.workaholics(), set); - } - - @Test - public void groupToTitles() { - Map> map = vorlesungsverzeichnis.groupToTitles(); - - List mt2 = new ArrayList<>(); - mt2.add("Audio-/Videotechnik"); - mt2.add("Mathematik 2"); - - List e2 = new ArrayList<>(); - e2.add("Mathematik 2"); - - List i2 = new ArrayList<>(); - i2.add("Algorithmen und Datenstrukturen"); - i2.add("Java 2"); - - List i4 = new ArrayList<>(); - i4.add("Internet-Technologien"); - i4.add("Rechnerarchitekturen"); - - assertEquals(mt2, map.get("MT2")); - assertEquals(e2, map.get("E2")); - assertEquals(i2, map.get("I2")); - assertEquals(i4, map.get("I4")); - } - - @Test - public void multipleTitles() { - Map> map = vorlesungsverzeichnis.multipleTitles(); - - List math = new ArrayList<>(); - math.add("Rabe"); - math.add("von Coelln"); - - Collections.sort(math); - assertEquals(map.get("Mathematik 2"), math); - } - - @Test - public void descendingTitles() { - List list = new ArrayList<>(); - list.add("Java 2"); - list.add("Algorithmen und Datenstrukturen"); - list.add("Mathematik 2"); - list.add("Mathematik 2"); - list.add("Audio-/Videotechnik"); - list.add("Rechnerarchitekturen"); - list.add("Internet-Technologien"); - - assertEquals(list, vorlesungsverzeichnis.descendingTitles()); - } - - @Test - public void toStringTest() { - List list = new ArrayList<>(); - list.add("I2"); - list.add("Java 2"); - list.add("Rump"); - list.add("10"); - try { - Vorlesung vorlesung = new Vorlesung(list); - assertEquals(vorlesung.toString(), "I2:Java 2:Rump:10"); - } catch (TextFileFormatException e) { - e.printStackTrace(); - } - } - +package de.joethei.hs.java2.tests; + +import de.joethei.hs.java2.praktikum.praktikum3.TextFileFormatException; +import de.joethei.hs.java2.praktikum.praktikum3.Vorlesung; +import de.joethei.hs.java2.praktikum.praktikum3.Vorlesungsverzeichnis; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.util.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class VorlesungsverzeichnisTest { + + private Vorlesungsverzeichnis vorlesungsverzeichnis; + + @Before + public void before() { + try { + vorlesungsverzeichnis = new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen.txt")).getFile()); + } catch (IOException | TextFileFormatException e) { + e.printStackTrace(); + } + + } + + @Test(expected = IOException.class) + public void constructorIOException() throws IOException, TextFileFormatException { + new Vorlesungsverzeichnis("HalloWelt"); + } + + @Test(expected = TextFileFormatException.class) + public void constructorTextFileFormatException() throws IOException, TextFileFormatException { + new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen-format.txt")).getFile()); + } + + @Test(expected = TextFileFormatException.class) + public void constructorNumberFormatException() throws IOException, TextFileFormatException { + new Vorlesungsverzeichnis(Objects.requireNonNull(getClass().getClassLoader().getResource("praktikum3/vorlesungen-number.txt")).getFile()); + } + + + @Test + public void titles() { + List titles = new ArrayList<>(); + titles.add("Algorithmen und Datenstrukturen"); + titles.add("Audio-/Videotechnik"); + titles.add("Internet-Technologien"); + titles.add("Java 2"); + titles.add("Mathematik 2"); + titles.add("Rechnerarchitekturen"); + + assertEquals(vorlesungsverzeichnis.titles(), titles); + + titles.add("Hallo Welt"); + assertNotEquals(vorlesungsverzeichnis.titles(), titles); + } + + @Test + public void workaholics() { + Set set = new HashSet<>(); + set.add("von Coelln"); + set.add("Rump"); + assertEquals(vorlesungsverzeichnis.workaholics(), set); + } + + @Test + public void groupToTitles() { + Map> map = vorlesungsverzeichnis.groupToTitles(); + + List mt2 = new ArrayList<>(); + mt2.add("Audio-/Videotechnik"); + mt2.add("Mathematik 2"); + + List e2 = new ArrayList<>(); + e2.add("Mathematik 2"); + + List i2 = new ArrayList<>(); + i2.add("Algorithmen und Datenstrukturen"); + i2.add("Java 2"); + + List i4 = new ArrayList<>(); + i4.add("Internet-Technologien"); + i4.add("Rechnerarchitekturen"); + + assertEquals(mt2, map.get("MT2")); + assertEquals(e2, map.get("E2")); + assertEquals(i2, map.get("I2")); + assertEquals(i4, map.get("I4")); + } + + @Test + public void multipleTitles() { + Map> map = vorlesungsverzeichnis.multipleTitles(); + + List math = new ArrayList<>(); + math.add("Rabe"); + math.add("von Coelln"); + + Collections.sort(math); + assertEquals(map.get("Mathematik 2"), math); + } + + @Test + public void descendingTitles() { + List list = new ArrayList<>(); + list.add("Java 2"); + list.add("Algorithmen und Datenstrukturen"); + list.add("Mathematik 2"); + list.add("Mathematik 2"); + list.add("Audio-/Videotechnik"); + list.add("Rechnerarchitekturen"); + list.add("Internet-Technologien"); + + assertEquals(list, vorlesungsverzeichnis.descendingTitles()); + } + + @Test + public void toStringTest() { + List list = new ArrayList<>(); + list.add("I2"); + list.add("Java 2"); + list.add("Rump"); + list.add("10"); + try { + Vorlesung vorlesung = new Vorlesung(list); + assertEquals(vorlesung.toString(), "I2:Java 2:Rump:10"); + } catch (TextFileFormatException e) { + e.printStackTrace(); + } + } + } \ No newline at end of file diff --git a/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest2.java b/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest2.java index 4184fc1..5ed35df 100644 --- a/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest2.java +++ b/src/test/java/de/joethei/hs/java2/tests/VorlesungsverzeichnisTest2.java @@ -1,240 +1,240 @@ -package de.joethei.hs.java2.tests; - -import de.joethei.hs.java2.praktikum.praktikum3.TextFileFormatException; -import de.joethei.hs.java2.praktikum.praktikum3.Vorlesung; -import de.joethei.hs.java2.praktikum.praktikum3.Vorlesungsverzeichnis; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; -import java.io.PrintWriter; -import java.util.*; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class VorlesungsverzeichnisTest2 { - private String filename = "src/main/resources/praktikum3/vorlesungen-db.txt"; - private PrintWriter pw; - - Class c = Vorlesung.class; // Klasse Vorlesung vorhanden? - - @Before - public void setUp() throws IOException - { - pw = new PrintWriter(filename); - } - - @Test - public void Titles() throws IOException, TextFileFormatException - { - List al = new ArrayList<>(); - - al.add("Elektrodynamik"); - al.add("Quantenmechanik"); - al.add("Quantenphysik"); - al.add("Relativitätstheorie"); - al.add("Theoretische Physik"); - al.add("Thermodynamik"); - - pw.print( - "A1:Relativitätstheorie:Einstein:15\n" + - "B2:Quantenmechanik:Heisenberg:17\n" + - "C2:Quantenphysik:Planck:5\n" + - "T4:Thermodynamik:Kelvin:78\n" + - "C2:Theoretische Physik:Kelvin:54\n" + - "B2:Thermodynamik:Planck:44\n" + - "T4:Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:34"); - pw.close(); - - - Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); -// System.out.println(al); -// System.out.println(l.titles()); - assertEquals(al,l.titles()); - } - - @Test - public void Workaholics() throws IOException, TextFileFormatException - { - Set s = new HashSet<>(); - - s.add("Planck"); - s.add("Kelvin"); - - pw.print( - "A1:Relativitätstheorie:Einstein:15\n" + - "B2:Quantenmechanik:Heisenberg:17\n" + - "C2:Quantenphysik:Planck:5\n" + - "T4:Thermodynamik:Kelvin:78\n" + - "C2:Theoretische Physik:Kelvin:54\n" + - "B2:Thermodynamik:Planck:44\n" + - "T4:Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:34"); - pw.close(); - - - Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); -// System.out.println(s); -// System.out.println(l.workaholics()); - assertEquals(s,l.workaholics()); - } - - @Test - public void GroupToTitles() throws IOException, TextFileFormatException - { - Map> map2 = new HashMap<>(); - List s1 = new ArrayList<>(); - List s2 = new ArrayList<>(); - List s3a = new ArrayList<>(); - List s3b = new ArrayList<>(); - List s4a = new ArrayList<>(); - List s4b = new ArrayList<>(); - - s1.add("Relativitätstheorie"); - map2.put("A1",s1); - s2.add("Quantenmechanik"); - s2.add("Thermodynamik"); - s2.add("Elektrodynamik"); - map2.put("B2",s2); - s3a.add("Quantenphysik"); - s3a.add("Theoretische Physik"); - s3b.add("Theoretische Physik"); - s3b.add("Quantenphysik"); - map2.put("C2",s3a); - s4a.add("Thermodynamik"); - s4a.add("Quantenphysik"); - map2.put("T4",s4a); - s4b.add("Quantenphysik"); - s4b.add("Thermodynamik"); - - pw.print( - "A1:Relativitätstheorie:Einstein:15\n" + - "B2:Quantenmechanik:Heisenberg:17\n" + - "C2:Quantenphysik:Planck:5\n" + - "T4:Thermodynamik:Kelvin:78\n" + - "C2:Theoretische Physik:Kelvin:54\n" + - "B2:Thermodynamik:Planck:44\n" + - "T4:Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:34"); - pw.close(); - - Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); -// System.out.println(map2); -// System.out.println(l.groupToTitles()); -// assertEquals(map2,l.groupToTitles()); - assertEquals(s1, l.groupToTitles().get("A1")); - assertTrue(s3a.equals(l.groupToTitles().get("C2")) || s3b.equals(l.groupToTitles().get("C2"))); - assertTrue(s4a.equals(l.groupToTitles().get("T4")) || s4b.equals(l.groupToTitles().get("T4"))); - } - - @Test - public void multipleTitles() throws IOException, TextFileFormatException - { - Map> map2 = new HashMap<>(); - List s1a = new ArrayList<>(); - List s1b = new ArrayList<>(); - - s1a.add("Kelvin"); - s1a.add("Planck"); - s1b.add("Planck"); - s1b.add("Kelvin"); - map2.put("Thermodynamik",s1a); - - pw.print( - "A1:Relativitätstheorie:Einstein:15\n" + - "B2:Quantenmechanik:Heisenberg:17\n" + - "C2:Quantenphysik:Planck:5\n" + - "T4:Thermodynamik:Kelvin:78\n" + - "C2:Theoretische Physik:Kelvin:54\n" + - "B2:Thermodynamik:Planck:44\n" + - "T4:Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:34"); - pw.close(); - - - Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); -// System.out.println(map2); -// System.out.println(l.multipleTitles()); -// assertEquals(map2,l.multipleTitles()); - assertTrue(s1a.equals(l.multipleTitles().get("Thermodynamik")) || s1b.equals(l.multipleTitles().get("Thermodynamik"))); - } - - @Test - public void descendingTitles() throws IOException, TextFileFormatException - { - { - List al = new ArrayList<>(); - - al.add("Thermodynamik"); - al.add("Theoretische Physik"); - al.add("Quantenphysik"); - al.add("Thermodynamik"); - al.add("Elektrodynamik"); - al.add("Quantenmechanik"); - al.add("Relativitätstheorie"); - al.add("Quantenphysik"); - - pw.print( - "A1:Relativitätstheorie:Einstein:15\n" + - "B2:Quantenmechanik:Heisenberg:17\n" + - "C2:Quantenphysik:Planck:5\n" + - "T4:Thermodynamik:Kelvin:78\n" + - "C2:Theoretische Physik:Kelvin:54\n" + - "B2:Thermodynamik:Planck:44\n" + - "T4:Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:34"); - pw.close(); - - Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); -// System.out.println(al); -// System.out.println(l.descendingTitles()); - assertEquals(al,l.descendingTitles()); - } - } - - @Test(expected=TextFileFormatException.class) - public void Liste_zu_kurz() throws IOException, TextFileFormatException { - pw.print( - "C2:Theoretische Physik:Kelvin:54\n" + - "B2:Thermodynamik:Planck\n" + - "T4:Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:34"); - pw.close(); - Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); - } - - @Test(expected=TextFileFormatException.class) - public void Liste_zu_lang() throws IOException, TextFileFormatException { - pw.print( - "C2:Theoretische Physik:Kelvin:54:55\n" + - "B2:Thermodynamik:Planck:44\n" + - "T4:Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:34"); - pw.close(); - Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); - } - - @Test(expected=TextFileFormatException.class) - public void Listenfeld_leer() throws IOException, TextFileFormatException { - pw.print( - "C2:Theoretische Physik:Kelvin:54\n" + - "B2:Thermodynamik:Planck:44\n" + - ":Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:34"); - pw.close(); - Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); - } - - @Test(expected=TextFileFormatException.class) - public void Teilnehmerzahl_keine_Zahl() throws IOException, TextFileFormatException { - pw.print( - "C2:Theoretische Physik:Kelvin:54\n" + - "B2:Thermodynamik:Planck:44\n" + - "T4:Quantenphysik:Planck:45\n" + - "B2:Elektrodynamik:Kelvin:ABC"); - pw.close(); - Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); - } -} +package de.joethei.hs.java2.tests; + +import de.joethei.hs.java2.praktikum.praktikum3.TextFileFormatException; +import de.joethei.hs.java2.praktikum.praktikum3.Vorlesung; +import de.joethei.hs.java2.praktikum.praktikum3.Vorlesungsverzeichnis; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class VorlesungsverzeichnisTest2 { + private String filename = "src/main/resources/praktikum3/vorlesungen-db.txt"; + private PrintWriter pw; + + Class c = Vorlesung.class; // Klasse Vorlesung vorhanden? + + @Before + public void setUp() throws IOException + { + pw = new PrintWriter(filename); + } + + @Test + public void Titles() throws IOException, TextFileFormatException + { + List al = new ArrayList<>(); + + al.add("Elektrodynamik"); + al.add("Quantenmechanik"); + al.add("Quantenphysik"); + al.add("Relativitätstheorie"); + al.add("Theoretische Physik"); + al.add("Thermodynamik"); + + pw.print( + "A1:Relativitätstheorie:Einstein:15\n" + + "B2:Quantenmechanik:Heisenberg:17\n" + + "C2:Quantenphysik:Planck:5\n" + + "T4:Thermodynamik:Kelvin:78\n" + + "C2:Theoretische Physik:Kelvin:54\n" + + "B2:Thermodynamik:Planck:44\n" + + "T4:Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:34"); + pw.close(); + + + Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); +// System.out.println(al); +// System.out.println(l.titles()); + assertEquals(al,l.titles()); + } + + @Test + public void Workaholics() throws IOException, TextFileFormatException + { + Set s = new HashSet<>(); + + s.add("Planck"); + s.add("Kelvin"); + + pw.print( + "A1:Relativitätstheorie:Einstein:15\n" + + "B2:Quantenmechanik:Heisenberg:17\n" + + "C2:Quantenphysik:Planck:5\n" + + "T4:Thermodynamik:Kelvin:78\n" + + "C2:Theoretische Physik:Kelvin:54\n" + + "B2:Thermodynamik:Planck:44\n" + + "T4:Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:34"); + pw.close(); + + + Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); +// System.out.println(s); +// System.out.println(l.workaholics()); + assertEquals(s,l.workaholics()); + } + + @Test + public void GroupToTitles() throws IOException, TextFileFormatException + { + Map> map2 = new HashMap<>(); + List s1 = new ArrayList<>(); + List s2 = new ArrayList<>(); + List s3a = new ArrayList<>(); + List s3b = new ArrayList<>(); + List s4a = new ArrayList<>(); + List s4b = new ArrayList<>(); + + s1.add("Relativitätstheorie"); + map2.put("A1",s1); + s2.add("Quantenmechanik"); + s2.add("Thermodynamik"); + s2.add("Elektrodynamik"); + map2.put("B2",s2); + s3a.add("Quantenphysik"); + s3a.add("Theoretische Physik"); + s3b.add("Theoretische Physik"); + s3b.add("Quantenphysik"); + map2.put("C2",s3a); + s4a.add("Thermodynamik"); + s4a.add("Quantenphysik"); + map2.put("T4",s4a); + s4b.add("Quantenphysik"); + s4b.add("Thermodynamik"); + + pw.print( + "A1:Relativitätstheorie:Einstein:15\n" + + "B2:Quantenmechanik:Heisenberg:17\n" + + "C2:Quantenphysik:Planck:5\n" + + "T4:Thermodynamik:Kelvin:78\n" + + "C2:Theoretische Physik:Kelvin:54\n" + + "B2:Thermodynamik:Planck:44\n" + + "T4:Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:34"); + pw.close(); + + Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); +// System.out.println(map2); +// System.out.println(l.groupToTitles()); +// assertEquals(map2,l.groupToTitles()); + assertEquals(s1, l.groupToTitles().get("A1")); + assertTrue(s3a.equals(l.groupToTitles().get("C2")) || s3b.equals(l.groupToTitles().get("C2"))); + assertTrue(s4a.equals(l.groupToTitles().get("T4")) || s4b.equals(l.groupToTitles().get("T4"))); + } + + @Test + public void multipleTitles() throws IOException, TextFileFormatException + { + Map> map2 = new HashMap<>(); + List s1a = new ArrayList<>(); + List s1b = new ArrayList<>(); + + s1a.add("Kelvin"); + s1a.add("Planck"); + s1b.add("Planck"); + s1b.add("Kelvin"); + map2.put("Thermodynamik",s1a); + + pw.print( + "A1:Relativitätstheorie:Einstein:15\n" + + "B2:Quantenmechanik:Heisenberg:17\n" + + "C2:Quantenphysik:Planck:5\n" + + "T4:Thermodynamik:Kelvin:78\n" + + "C2:Theoretische Physik:Kelvin:54\n" + + "B2:Thermodynamik:Planck:44\n" + + "T4:Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:34"); + pw.close(); + + + Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); +// System.out.println(map2); +// System.out.println(l.multipleTitles()); +// assertEquals(map2,l.multipleTitles()); + assertTrue(s1a.equals(l.multipleTitles().get("Thermodynamik")) || s1b.equals(l.multipleTitles().get("Thermodynamik"))); + } + + @Test + public void descendingTitles() throws IOException, TextFileFormatException + { + { + List al = new ArrayList<>(); + + al.add("Thermodynamik"); + al.add("Theoretische Physik"); + al.add("Quantenphysik"); + al.add("Thermodynamik"); + al.add("Elektrodynamik"); + al.add("Quantenmechanik"); + al.add("Relativitätstheorie"); + al.add("Quantenphysik"); + + pw.print( + "A1:Relativitätstheorie:Einstein:15\n" + + "B2:Quantenmechanik:Heisenberg:17\n" + + "C2:Quantenphysik:Planck:5\n" + + "T4:Thermodynamik:Kelvin:78\n" + + "C2:Theoretische Physik:Kelvin:54\n" + + "B2:Thermodynamik:Planck:44\n" + + "T4:Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:34"); + pw.close(); + + Vorlesungsverzeichnis l = new Vorlesungsverzeichnis(filename); +// System.out.println(al); +// System.out.println(l.descendingTitles()); + assertEquals(al,l.descendingTitles()); + } + } + + @Test(expected=TextFileFormatException.class) + public void Liste_zu_kurz() throws IOException, TextFileFormatException { + pw.print( + "C2:Theoretische Physik:Kelvin:54\n" + + "B2:Thermodynamik:Planck\n" + + "T4:Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:34"); + pw.close(); + Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); + } + + @Test(expected=TextFileFormatException.class) + public void Liste_zu_lang() throws IOException, TextFileFormatException { + pw.print( + "C2:Theoretische Physik:Kelvin:54:55\n" + + "B2:Thermodynamik:Planck:44\n" + + "T4:Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:34"); + pw.close(); + Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); + } + + @Test(expected=TextFileFormatException.class) + public void Listenfeld_leer() throws IOException, TextFileFormatException { + pw.print( + "C2:Theoretische Physik:Kelvin:54\n" + + "B2:Thermodynamik:Planck:44\n" + + ":Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:34"); + pw.close(); + Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); + } + + @Test(expected=TextFileFormatException.class) + public void Teilnehmerzahl_keine_Zahl() throws IOException, TextFileFormatException { + pw.print( + "C2:Theoretische Physik:Kelvin:54\n" + + "B2:Thermodynamik:Planck:44\n" + + "T4:Quantenphysik:Planck:45\n" + + "B2:Elektrodynamik:Kelvin:ABC"); + pw.close(); + Vorlesungsverzeichnis k = new Vorlesungsverzeichnis(filename); + } +}