aocc22

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

test_smallset.c (3830B)


      1 #include "test_smallset.h"
      2 
      3 void test_smallset_init()
      4 {
      5   smallset s;
      6   smallset_init(&s, 17);
      7   
      8   size_t i;
      9   for(i = 0; i < (17+7)/8; i++) {
     10     CU_ASSERT(s.data[i] == 0);
     11   }
     12 
     13   smallset_clear(&s);
     14 }
     15 
     16 void test_smallset_insert()
     17 {
     18   smallset s;
     19   smallset_init(&s, 17);
     20 
     21   smallset_insert(&s, 3);
     22 
     23   CU_ASSERT(s.data[0] == 0x80 >> 3);
     24   CU_ASSERT(s.data[1] == 0x00);
     25   CU_ASSERT(s.data[2] == 0x00);
     26 
     27   smallset_clear(&s);
     28 }
     29 
     30 void test_smallset_lookup()
     31 {
     32   smallset s;
     33   smallset_init(&s, 17);
     34 
     35   smallset_insert(&s, 3);
     36   smallset_insert(&s, 15);
     37   smallset_insert(&s, 4);
     38 
     39   CU_ASSERT(smallset_lookup(&s, 0) == 0);
     40   CU_ASSERT(smallset_lookup(&s, 1) == 0);
     41   CU_ASSERT(smallset_lookup(&s, 2) == 0);
     42   CU_ASSERT(smallset_lookup(&s, 3) != 0);
     43   CU_ASSERT(smallset_lookup(&s, 4) != 0);
     44   CU_ASSERT(smallset_lookup(&s, 5) == 0);
     45   CU_ASSERT(smallset_lookup(&s, 6) == 0);
     46   CU_ASSERT(smallset_lookup(&s, 7) == 0);
     47   CU_ASSERT(smallset_lookup(&s, 8) == 0);
     48   CU_ASSERT(smallset_lookup(&s, 9) == 0);
     49   CU_ASSERT(smallset_lookup(&s, 10) == 0);
     50   CU_ASSERT(smallset_lookup(&s, 11) == 0);
     51   CU_ASSERT(smallset_lookup(&s, 12) == 0);
     52   CU_ASSERT(smallset_lookup(&s, 13) == 0);
     53   CU_ASSERT(smallset_lookup(&s, 14) == 0);
     54   CU_ASSERT(smallset_lookup(&s, 15) != 0);
     55   CU_ASSERT(smallset_lookup(&s, 16) == 0);
     56 
     57   smallset_clear(&s);
     58 }
     59 
     60 void test_smallset_intersection() 
     61 {
     62   smallset a, b, s;
     63   smallset_init(&a, 17);
     64   smallset_init(&b, 17);
     65   smallset_init(&s, 17);
     66 
     67   smallset_insert(&a, 3);
     68   smallset_insert(&a, 4);
     69   smallset_insert(&a, 15);
     70   smallset_insert(&a, 5);
     71   smallset_insert(&a, 7);
     72 
     73   smallset_insert(&b, 3);
     74   smallset_insert(&b, 4);
     75   smallset_insert(&b, 15);
     76   smallset_insert(&b, 6);
     77   smallset_insert(&b, 9);
     78   smallset_insert(&b, 10);
     79 
     80   smallset_intersection(&s, &a, &b);
     81 
     82   CU_ASSERT(smallset_lookup(&s, 0) == 0);
     83   CU_ASSERT(smallset_lookup(&s, 1) == 0);
     84   CU_ASSERT(smallset_lookup(&s, 2) == 0);
     85   CU_ASSERT(smallset_lookup(&s, 3) != 0);
     86   CU_ASSERT(smallset_lookup(&s, 4) != 0);
     87   CU_ASSERT(smallset_lookup(&s, 5) == 0);
     88   CU_ASSERT(smallset_lookup(&s, 6) == 0);
     89   CU_ASSERT(smallset_lookup(&s, 7) == 0);
     90   CU_ASSERT(smallset_lookup(&s, 8) == 0);
     91   CU_ASSERT(smallset_lookup(&s, 9) == 0);
     92   CU_ASSERT(smallset_lookup(&s, 10) == 0);
     93   CU_ASSERT(smallset_lookup(&s, 11) == 0);
     94   CU_ASSERT(smallset_lookup(&s, 12) == 0);
     95   CU_ASSERT(smallset_lookup(&s, 13) == 0);
     96   CU_ASSERT(smallset_lookup(&s, 14) == 0);
     97   CU_ASSERT(smallset_lookup(&s, 15) != 0);
     98   CU_ASSERT(smallset_lookup(&s, 16) == 0);
     99 
    100   smallset_clear(&s);
    101 }
    102 
    103 void test_smallset_tonstr()
    104 {
    105   smallset s;
    106   smallset_init(&s, 25);
    107 
    108   char buffer[256];
    109 
    110   smallset_tonstr(buffer, 256, &s);
    111   CU_ASSERT(strncmp(buffer, "{}", 2) == 0);
    112 
    113   smallset_insert(&s, 1);
    114   smallset_tonstr(buffer, 256, &s);
    115   CU_ASSERT(strncmp(buffer, "{1}", 3) == 0);
    116 
    117   smallset_insert(&s, 12);
    118   smallset_tonstr(buffer, 256, &s);
    119   CU_ASSERT(strncmp(buffer, "{1, 12}", 6) == 0);
    120 
    121   smallset_clear(&s);
    122 }
    123 
    124 void test_smallset_getone()
    125 {
    126   smallset s;
    127   smallset_init(&s, 17);
    128 
    129   CU_ASSERT(smallset_getone(&s) == SMALLSET_IS_EMPTY);
    130 
    131   smallset_insert(&s, 3);
    132   smallset_insert(&s, 15);
    133   smallset_insert(&s, 4);
    134 
    135   CU_ASSERT(smallset_getone(&s) == 3);
    136 
    137   smallset_clear(&s);
    138 }
    139 
    140 void test_smallset_empty()
    141 {
    142   smallset s;
    143   smallset_init(&s, 17);
    144 
    145   CU_ASSERT(smallset_getone(&s) == SMALLSET_IS_EMPTY);
    146 
    147   smallset_insert(&s, 3);
    148   smallset_insert(&s, 15);
    149   smallset_insert(&s, 4);
    150 
    151   CU_ASSERT(smallset_getone(&s) == 3);
    152 
    153   smallset_empty(&s);
    154 
    155   CU_ASSERT(smallset_getone(&s) == SMALLSET_IS_EMPTY);
    156 
    157   smallset_clear(&s);
    158 }
    159 
    160 void test_smallset_cardinality()
    161 {
    162 	smallset s;
    163 	smallset_init(&s, 7*50);
    164 
    165 	uint64_t i,j;
    166 	for(i = 0; i < 50; i++) {
    167 		for(j = 0; j < 7; j++) {
    168 			smallset_insert(&s, i*7 + j);
    169 		}
    170 		CU_ASSERT(smallset_cardinality(&s) == 7*(i+1));
    171 	}
    172 	smallset_clear(&s);
    173 }