aocc23

Advent of Code 2023
git clone git://www.tkruger.se/aocc23.git
Log | Files | Refs | README

test_stack_str.c (1685B)


      1 #include "test_stack_str.h"
      2 
      3 void test_stack_str_init() {
      4   stack_str t;
      5   stack_str_init(&t);
      6 
      7   CU_ASSERT(t.nmemb == 0);
      8   CU_ASSERT(t.alloc > 0);
      9   CU_ASSERT(t.data != NULL);
     10 
     11   stack_str_clear(&t);
     12 }
     13 
     14 void test_stack_str_push() {
     15   stack_str t;
     16   stack_str_init(&t);
     17 
     18   uint64_t i;
     19   char buf[2 * BASE_STACK_STR_SIZE][256];
     20   for (i = 0; i < 2 * BASE_STACK_STR_SIZE; i++) {
     21     snprintf(buf[i], 256, "%llu", i);
     22     stack_str_push(&t, buf[i]);
     23   }
     24 
     25   CU_ASSERT(t.alloc == 2 * BASE_STACK_STR_SIZE);
     26   CU_ASSERT(t.nmemb == 2 * BASE_STACK_STR_SIZE);
     27   for (i = 0; i < 2 * BASE_STACK_STR_SIZE; i++) {
     28     CU_ASSERT(strncmp(buf[i], t.data[i], 256) == 0);
     29   }
     30 
     31   stack_str_clear(&t);
     32 }
     33 
     34 void test_stack_str_get_getlast() {
     35   stack_str t;
     36   stack_str_init(&t);
     37 
     38   uint64_t i;
     39   char buf[2 * BASE_STACK_STR_SIZE][256];
     40   for (i = 0; i < 2 * BASE_STACK_STR_SIZE; i++) {
     41     snprintf(buf[i], 256, "%llu", i);
     42     stack_str_push(&t, buf[i]);
     43   }
     44 
     45   for (i = 0; i < t.nmemb; i++) {
     46     CU_ASSERT(stack_str_get(&t, i) == buf[i]);
     47   }
     48   CU_ASSERT(stack_str_getlast(&t) == buf[2 * BASE_STACK_STR_SIZE - 1]);
     49 
     50   stack_str_clear(&t);
     51 }
     52 
     53 void test_stack_str_pop() {
     54   stack_str t;
     55   stack_str_init(&t);
     56 
     57   char *strs[3] = {"hello", "world", "this is a msg"};
     58 
     59   stack_str_push(&t, strs[0]);
     60   stack_str_push(&t, strs[1]);
     61   stack_str_push(&t, strs[2]);
     62 
     63   CU_ASSERT(t.nmemb == 3);
     64   CU_ASSERT(stack_str_pop(&t) == strs[2]);
     65   CU_ASSERT(t.nmemb == 2);
     66   CU_ASSERT(stack_str_pop(&t) == strs[1]);
     67   CU_ASSERT(t.nmemb == 1);
     68   CU_ASSERT(stack_str_pop(&t) == strs[0]);
     69   CU_ASSERT(t.nmemb == 0);
     70   CU_ASSERT(stack_str_pop(&t) == STACK_STR_EMPTY_POP);
     71   CU_ASSERT(t.nmemb == 0);
     72 
     73   stack_str_clear(&t);
     74 }