53 lines
1.5 KiB
C
53 lines
1.5 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
#include "stack.h"
|
|
|
|
int main(void)
|
|
{
|
|
StackNode *s = NULL;
|
|
|
|
// push 3 integers
|
|
int *a = malloc(sizeof(int));
|
|
*a = 1;
|
|
s = push(s, a);
|
|
int *b = malloc(sizeof(int));
|
|
*b = 2;
|
|
s = push(s, b);
|
|
int *c = malloc(sizeof(int));
|
|
*c = 3;
|
|
s = push(s, c);
|
|
|
|
// oben liegt c (3)
|
|
int *topv = (int *)top(s);
|
|
if(topv == NULL || *topv != 3) { fprintf(stderr, "stack top expected 3\n"); return 1; }
|
|
|
|
// oben liegt nun 2
|
|
s = pop(s);
|
|
topv = (int *)top(s);
|
|
if(topv == NULL || *topv != 2) { fprintf(stderr, "stack top expected 2 after pop\n"); return 2; }
|
|
|
|
// oben liegt nun 1
|
|
s = pop(s);
|
|
topv = (int *)top(s);
|
|
if(topv == NULL || *topv != 1) { fprintf(stderr, "stack top expected 1 after pop\n"); return 3; }
|
|
|
|
// letzen Stapelinhalt holen
|
|
s = pop(s);
|
|
if(s != NULL) { fprintf(stderr, "stack expected empty after popping all\n"); return 4; }
|
|
|
|
// Eigenen Speicher freigeben
|
|
free(a);
|
|
free(b);
|
|
free(c);
|
|
|
|
// test clearStack mit leerem Stack
|
|
s = push(s, malloc(sizeof(int)));
|
|
s = push(s, malloc(sizeof(int)));
|
|
clearStack(s); // clearStack must free nodes but not payload; free payloads not necessary because we leaked intentionally for test of API
|
|
// Note: above payloads are not freed (stack API spec); this test ensures clearStack doesn't crash.
|
|
// Funktioniert alles
|
|
printf("test_stack: OK\n");
|
|
return 0;
|
|
}
|