#include #include "stack.h" #include "unity.h" void test_push_and_top(void); void test_pop(void); void test_clearStack(void); void setUp(void) {} void tearDown(void) {} int main(void) { UNITY_BEGIN(); RUN_TEST(test_push_and_top); RUN_TEST(test_pop); RUN_TEST(test_clearStack); return UNITY_END(); } void test_push_and_top(void) { StackNode *stack = NULL; int *a = malloc(sizeof(int)); *a = 10; int *b = malloc(sizeof(int)); *b = 20; int *c = malloc(sizeof(int)); *c = 30; stack = push(stack, a); stack = push(stack, b); stack = push(stack, c); TEST_ASSERT_EQUAL_INT(30, *(int*)top(stack)); // Cleanup data manually void *data; stack = pop(stack, &data); free(data); stack = pop(stack, &data); free(data); stack = pop(stack, &data); free(data); TEST_ASSERT_NULL(stack); } void test_pop(void) { StackNode *stack = NULL; int *x = malloc(sizeof(int)); *x = 111; int *y = malloc(sizeof(int)); *y = 222; stack = push(stack, x); stack = push(stack, y); void *data; stack = pop(stack, &data); TEST_ASSERT_EQUAL_INT(222, *(int*)data); free(data); stack = pop(stack, &data); TEST_ASSERT_EQUAL_INT(111, *(int*)data); free(data); TEST_ASSERT_NULL(stack); } void test_clearStack(void) { StackNode *stack = NULL; int *p = malloc(sizeof(int)); *p = 7; int *q = malloc(sizeof(int)); *q = 8; stack = push(stack, p); stack = push(stack, q); // Pop to free data first! void *data; stack = pop(stack, &data); free(data); stack = pop(stack, &data); free(data); clearStack(&stack); TEST_ASSERT_NULL(stack); }