Add unit test test_numbers.c
This commit is contained in:
parent
a515698e0f
commit
06890682f8
119
test_numbers.c
Normal file
119
test_numbers.c
Normal file
@ -0,0 +1,119 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <assert.h> // Abbruch bei unerfüllter Bedingung
|
||||
#include "numbers.h"
|
||||
#include "bintree.h"
|
||||
|
||||
// Vergleichsfunktion für unsigned int (für BST-Test)
|
||||
static int compareUInt(const void *a, const void *b) // nur in dieser Datei sichtbar
|
||||
{
|
||||
unsigned int x = *(const unsigned int *)a; // in unsigned in umwandeln
|
||||
unsigned int y = *(const unsigned int *)b;
|
||||
|
||||
if (x < y) return -1; // Vergleichsrückgabe für Binärbaum
|
||||
if (x > y) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void test_createNumbers_basic()
|
||||
{
|
||||
printf("Running test_createNumbers_basic...\n");
|
||||
|
||||
unsigned int len = 20; // Anlegen eines Arrays
|
||||
unsigned int *arr = createNumbers(len);
|
||||
assert(arr != NULL); // Fehler -> Abbruch
|
||||
|
||||
|
||||
assert(len >= 2); // für ein Duplikat min 2
|
||||
|
||||
// Prüfen: Array hat länge len
|
||||
unsigned int size = len;
|
||||
(void)size; // vermeidet warnings
|
||||
|
||||
free(arr); // Speicher wird freigegeben
|
||||
printf(" test_createNumbers_basic passed\n");
|
||||
}
|
||||
|
||||
void test_createNumbers_unique_except_one()
|
||||
{
|
||||
printf("Running test_createNumbers_unique_except_one...\n");
|
||||
|
||||
unsigned int len = 100; // Erzeugen eines Arrays
|
||||
unsigned int *arr = createNumbers(len);
|
||||
assert(arr != NULL);
|
||||
|
||||
// Prüfen, dass genau EIN Duplikat existiert
|
||||
TreeNode *root = NULL; // neuer Binärbaum
|
||||
int isDup; // zeigt ob Wert doppelt
|
||||
unsigned int duplicateCount = 0; // zählt gefundene Duplikate
|
||||
|
||||
for (unsigned int i = 0; i < len; i++) // Array in BST eingefügt
|
||||
{
|
||||
root = addToTree(root, &arr[i], sizeof(unsigned int), compareUInt, &isDup);
|
||||
if (isDup)
|
||||
duplicateCount++; // sollte 1 sein
|
||||
}
|
||||
|
||||
// Es muss genau 1 doppelter Wert existieren
|
||||
assert(duplicateCount == 1);
|
||||
|
||||
clearTree(root); // Baum und Array freigeben
|
||||
free(arr);
|
||||
|
||||
printf(" test_createNumbers_unique_except_one passed\n");
|
||||
}
|
||||
|
||||
void test_getDuplicate()
|
||||
{
|
||||
printf("Running test_getDuplicate...\n");
|
||||
|
||||
unsigned int len = 50; // Erzeugen eines Arrays
|
||||
unsigned int *arr = createNumbers(len);
|
||||
assert(arr != NULL);
|
||||
|
||||
unsigned int duplicate = getDuplicate(arr, len); // soll Duplikat finden
|
||||
|
||||
|
||||
unsigned int countInArray = 0;
|
||||
for (unsigned int i = 0; i < len; i++) // Durchlauf des Arrays
|
||||
{
|
||||
if (arr[i] == duplicate)
|
||||
countInArray++; // Zählt wie oft die gefundene Zahl vorkommt
|
||||
}
|
||||
|
||||
assert(countInArray == 2); // alle anderen Werte einzigartig
|
||||
|
||||
free(arr); // Array freigeben
|
||||
|
||||
printf(" test_getDuplicate passed\n");
|
||||
}
|
||||
|
||||
// Testet große Arrays (Stress-Test)
|
||||
void test_large_input() // testes zufällige Kollision
|
||||
{
|
||||
printf("Running test_large_input...\n");
|
||||
|
||||
unsigned int len = 20000; // Erzeugen eines Arrays
|
||||
unsigned int *arr = createNumbers(len);
|
||||
assert(arr != NULL);
|
||||
|
||||
unsigned int d = getDuplicate(arr, len); // doppelter Wert sollte existieren
|
||||
assert(d != 0);
|
||||
|
||||
free(arr); // Array freigeben
|
||||
|
||||
printf(" test_large_input passed\n");
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("=== Running numbers Tests ===\n");
|
||||
|
||||
test_createNumbers_basic(); // alle Test nacheinander ausführen
|
||||
test_createNumbers_unique_except_one();
|
||||
test_getDuplicate();
|
||||
test_large_input();
|
||||
|
||||
printf("=== All tests passed successfully! ===\n");
|
||||
return 0;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user