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 }