aocc23

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

test_ht.c (1290B)


      1 #include "test_ht.h"
      2 
      3 void test_ht_init() {
      4   ht h;
      5 
      6   ht_init(&h);
      7   CU_ASSERT(h.nelts == 0);
      8   CU_ASSERT(h.nalloc == HT_DEFAULT_SIZE);
      9   CU_ASSERT(h.entries != NULL);
     10 
     11   ht_clear(&h);
     12 
     13   ht_init_size(&h, 23);
     14   CU_ASSERT(h.nelts == 0);
     15   CU_ASSERT(h.nalloc == 23);
     16   CU_ASSERT(h.entries != NULL);
     17 
     18   ht_clear(&h);
     19 }
     20 
     21 void test_ht_insert() {
     22   ht h;
     23   ht_init_size(&h, 16);
     24 
     25   sd elts[17];
     26 
     27   size_t i;
     28   for (i = 0; i < 17; i++) {
     29     sd_init_u64(&elts[i], i);
     30     ht_insert(&h, elts[i]);
     31     CU_ASSERT(h.nelts == i + 1);
     32   }
     33 
     34   sd tmp;
     35   sd_init_u64(&tmp, 12);
     36   ht_insert(&h, tmp);
     37   CU_ASSERT(h.nelts == 17);
     38 
     39   for (i = 0; i < 17; i++)
     40     sd_clear(&elts[i]);
     41 
     42   ht_clear(&h);
     43 }
     44 
     45 void test_ht_lookup() {
     46   ht h;
     47   ht_init_size(&h, 32);
     48 
     49   sd elts[17];
     50 
     51   size_t i;
     52   for (i = 0; i < 17; i++) {
     53     sd_init_u64(&elts[i], 2 * i);
     54     ht_insert(&h, elts[i]);
     55   }
     56 
     57   sd nelts[2 * 17];
     58   for (i = 0; i < 2 * 17; i++) {
     59     sd_init_u64(&nelts[i], i);
     60     if (i % 2 == 0) {
     61       int index = ht_lookup(&h, nelts[i]);
     62       CU_ASSERT(index <= 17);
     63       CU_ASSERT(index >= 0);
     64     } else {
     65       CU_ASSERT(ht_lookup(&h, nelts[i]) == HT_LOOKUP_NOT_FOUND);
     66     }
     67   }
     68 
     69   for (i = 0; i < 17; i++)
     70     sd_clear(&elts[i]);
     71   for (i = 0; i < 2 * 17; i++)
     72     sd_clear(&nelts[i]);
     73 
     74   ht_clear(&h);
     75 }