aocc22

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

test_ht.c (1261B)


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