aocc23

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

test_smallset.c (5052B)


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