Zurück zur SP1 Übersicht
lilo-test-nudelsalat.c
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <unistd.h>
#include "lilo.c" // bitte nicht nachmachen, keine .c-Dateien includen!
static int ret = 0;
static void test_title(char *s) {
printf("\x1B[1;37m~~\x1B[0m - %s \x1B[1;31m", (s));
fflush(stdout);
}
static void test_update(bool b) {
if (b) {
printf("\r\x1B[0m\x1B[32mOK\x1B[0m\n");
} else {
ret = 1;
printf("\r\x1B[0m\x1B[1;31m!!\x1B[0m\n");
}
}
int nudeltest(void) {
printf("\x1B[1;37mlilo-Test von nudelsalat | milan.stephan@fau.de | https://sp.milanstephan.de\x1B[0m\n");
printf("\x1B[31mImmer den zuerst aufgelisteten Fehler beheben, da Folgefehler!\x1B[0m\n");
printf("Die Tests sollten so ziemlich sofort (auf jeden Fall innerhalb einer Sekunde) durchlaufen.\n");
printf("Falls nicht, gibt es wahrscheinlich irgendwo eine Endlosschleife.\n");
printf("\n\x1B[1;37m~~\x1B[0m = laeuft, \x1B[32mOK\x1B[0m = bestanden, \x1B[1;31m!!\x1B[0m = fehlgeschlagen\n");
printf("\nTest der Kernfunktionen:\n");
test_title("removeElement bei leerer Liste");
test_update(removeElement() == -1);
test_title("1 Element hinzufuegen");
test_update(insertElement(47) == 47);
test_title("1 Element entfernen");
test_update(removeElement() == 47);
test_title("Liste ist nach Hinzufuegen/Entfernen leer");
test_update(removeElement() == -1);
test_title("-1 bei insertElement mit negativer Zahl");
test_update(insertElement(-42) == -1);
test_title("Liste ist nach insertElement mit negativer Zahl leer");
test_update(removeElement() == -1);
test_title("0 hinzufuegen");
test_update(insertElement(0) == 0);
test_title("0 entfernen");
test_update(removeElement() == 0);
test_title("Liste ist nach Hinzufuegen/Entfernen leer");
test_update(removeElement() == -1);
test_title("Einen zuvor entfernten Wert erneut hinzufuegen und wieder entfernen");
test_update(insertElement(47) == 47
&& removeElement() == 47);
test_title("Haeufiges remove auf leere Liste");
char b = 1;
for (int i = 0; i < 100; i++) {
if (removeElement() != -1) {
b = 0;
}
}
test_update(b);
printf("\nKombinierte Tests:\n");
test_title("3 Elemente zuerst hinzufuegen und dann wieder entfernen, Test ob Liste leer ist");
test_update(insertElement(47) == 47
&& insertElement(11) == 11
&& insertElement(1337) == 1337
&& removeElement() == 47
&& removeElement() == 11
&& removeElement() == 1337
&& removeElement() == -1);
test_title("Hinzufuegen und Entfernen mehrerer Elemente, gemischte Reihenfolge, Test ob Liste leer ist");
test_update(insertElement(47) == 47
&& insertElement(11) == 11
&& insertElement(42) == 42
&& removeElement() == 47
&& insertElement(66) == 66
&& removeElement() == 11
&& removeElement() == 42
&& removeElement() == 66
&& removeElement() == -1);
test_title("Hinzufuegen und Entfernen mehrerer Elemente, gemischte Reihenfolge, Einfuegen eines zuvor entfernten Wertes, Test ob Liste leer ist");
test_update(insertElement(47) == 47
&& insertElement(11) == 11
&& insertElement(42) == 42
&& removeElement() == 47
&& insertElement(47) == 47
&& removeElement() == 11
&& removeElement() == 42
&& removeElement() == 47
&& removeElement() == -1);
printf("\nDuplikat-Tests:\n");
test_title("Bereits vorhandenen Wert einfuegen, der weder am Anfang noch am Ende der Liste steht");
test_update(insertElement(42) == 42
&& insertElement(11) == 11
&& insertElement(22) == 22
&& insertElement(11) == -1);
test_title("Elemente wieder entfernen, Test ob Liste leer ist");
test_update(removeElement() == 42
&& removeElement() == 11
&& removeElement() == 22
&& removeElement() == -1);
test_title("Bereits vorhandenen Wert einfuegen, der am Ende der Liste steht");
test_update(insertElement(42) == 42
&& insertElement(11) == 11
&& insertElement(11) == -1
&& insertElement(22) == 22);
test_title("Elemente wieder entfernen, Test ob Liste leer ist");
test_update(removeElement() == 42
&& removeElement() == 11
&& removeElement() == 22
&& removeElement() == -1);
test_title("Bereits vorhandenen Wert einfuegen, der am Anfang der Liste steht");
test_update(insertElement(42) == 42
&& insertElement(11) == 11
&& insertElement(42) == -1);
test_title("Elemente wieder entfernen, Test ob Liste leer ist");
test_update(removeElement() == 42
&& removeElement() == 11
&& removeElement() == -1);
_exit(ret);
}