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 }