smallset

Tools for subsets of [n], where n is not big
git clone git://www.tkruger.se/set_u64.git
Log | Files | Refs | README

test_smallset.c (5276B)


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