summaryrefslogtreecommitdiff
path: root/tests/t_vector.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/t_vector.c')
-rw-r--r--tests/t_vector.c61
1 files changed, 30 insertions, 31 deletions
diff --git a/tests/t_vector.c b/tests/t_vector.c
index f0a9bf7..42ce31a 100644
--- a/tests/t_vector.c
+++ b/tests/t_vector.c
@@ -200,17 +200,16 @@ static void case_insert_compare_prefix(void) {
200 into the first address byte, so the peers are distinct but arrive in no 200 into the first address byte, so the peers are distinct but arrive in no
201 particular order: a list generated in ascending order would come back 201 particular order: a list generated in ascending order would come back
202 sorted whether or not vector_redistribute_buckets sorted it. */ 202 sorted whether or not vector_redistribute_buckets sorted it. */
203static void build_flat_peerlist(ot_peerlist *peer_list, size_t count) { 203static void build_flat_vector(ot_vector *peers, size_t count) {
204 size_t i; 204 size_t i;
205 205
206 memset(peer_list, 0, sizeof(*peer_list)); 206 memset(peers, 0, sizeof(*peers));
207 peer_list->peers.data = malloc(count * OT_PEER_SIZE4); 207 peers->data = malloc(count * OT_PEER_SIZE4);
208 peer_list->peers.size = count; 208 peers->size = count;
209 peer_list->peers.space = count; 209 peers->space = count;
210 peer_list->peer_count = count;
211 210
212 for (i = 0; i < count; ++i) { 211 for (i = 0; i < count; ++i) {
213 uint8_t *peer = (uint8_t *)peer_list->peers.data + i * OT_PEER_SIZE4; 212 uint8_t *peer = (uint8_t *)peers->data + i * OT_PEER_SIZE4;
214 213
215 memset(peer, 0, OT_PEER_SIZE4); 214 memset(peer, 0, OT_PEER_SIZE4);
216 peer[0] = (uint8_t)i; 215 peer[0] = (uint8_t)i;
@@ -222,19 +221,19 @@ static void build_flat_peerlist(ot_peerlist *peer_list, size_t count) {
222 221
223static void case_redistribute_holds_every_peer(void) { 222static void case_redistribute_holds_every_peer(void) {
224 const size_t count = 513; 223 const size_t count = 513;
225 ot_peerlist peer_list; 224 ot_vector peers;
226 size_t bucket, total_size = 0, empty = 0, largest = 0; 225 size_t bucket, total_size = 0, empty = 0, largest = 0;
227 ot_vector *buckets; 226 ot_vector *buckets;
228 227
229 test_case("a peer list past the threshold is split into buckets"); 228 test_case("a peer list past the threshold is split into buckets");
230 build_flat_peerlist(&peer_list, count); 229 build_flat_vector(&peers, count);
231 CHECK(peer_list.peers.data != NULL); 230 CHECK(peers.data != NULL);
232 vector_redistribute_buckets(&peer_list, OT_PEER_SIZE4); 231 vector_redistribute_buckets(&peers, OT_PEER_SIZE4, count);
233 CHECK_INT(OT_PEERLIST_HASBUCKETS(&peer_list), 1); 232 CHECK_INT(OT_VECTOR_HASBUCKETS(&peers), 1);
234 CHECK_INT(peer_list.peers.size, 16); 233 CHECK_INT(peers.size, 16);
235 234
236 buckets = peer_list.peers.data; 235 buckets = peers.data;
237 for (bucket = 0; bucket < peer_list.peers.size; ++bucket) { 236 for (bucket = 0; bucket < peers.size; ++bucket) {
238 total_size += buckets[bucket].size; 237 total_size += buckets[bucket].size;
239 if (!buckets[bucket].size) 238 if (!buckets[bucket].size)
240 ++empty; 239 ++empty;
@@ -252,23 +251,23 @@ static void case_redistribute_holds_every_peer(void) {
252 CHECK_INT(empty, 0); 251 CHECK_INT(empty, 0);
253 CHECK(largest < count / 2); 252 CHECK(largest < count / 2);
254 253
255 vector_clean_list(peer_list.peers.data, peer_list.peers.size); 254 vector_clean_list(peers.data, peers.size);
256} 255}
257 256
258static void case_redistribute_sorts_each_bucket(void) { 257static void case_redistribute_sorts_each_bucket(void) {
259 const size_t count = 1000; 258 const size_t count = 1000;
260 ot_peerlist peer_list; 259 ot_vector peers;
261 size_t bucket, i, out_of_order = 0; 260 size_t bucket, i, out_of_order = 0;
262 ot_vector *buckets; 261 ot_vector *buckets;
263 262
264 test_case("every bucket comes back sorted, so bsearch can be used on it"); 263 test_case("every bucket comes back sorted, so bsearch can be used on it");
265 build_flat_peerlist(&peer_list, count); 264 build_flat_vector(&peers, count);
266 CHECK(peer_list.peers.data != NULL); 265 CHECK(peers.data != NULL);
267 vector_redistribute_buckets(&peer_list, OT_PEER_SIZE4); 266 vector_redistribute_buckets(&peers, OT_PEER_SIZE4, count);
268 CHECK_INT(OT_PEERLIST_HASBUCKETS(&peer_list), 1); 267 CHECK_INT(OT_VECTOR_HASBUCKETS(&peers), 1);
269 268
270 buckets = peer_list.peers.data; 269 buckets = peers.data;
271 for (bucket = 0; bucket < peer_list.peers.size; ++bucket) 270 for (bucket = 0; bucket < peers.size; ++bucket)
272 for (i = 1; i < buckets[bucket].size; ++i) { 271 for (i = 1; i < buckets[bucket].size; ++i) {
273 const uint8_t *prev = (uint8_t *)buckets[bucket].data + (i - 1) * OT_PEER_SIZE4; 272 const uint8_t *prev = (uint8_t *)buckets[bucket].data + (i - 1) * OT_PEER_SIZE4;
274 const uint8_t *next = (uint8_t *)buckets[bucket].data + i * OT_PEER_SIZE4; 273 const uint8_t *next = (uint8_t *)buckets[bucket].data + i * OT_PEER_SIZE4;
@@ -278,19 +277,19 @@ static void case_redistribute_sorts_each_bucket(void) {
278 } 277 }
279 CHECK_INT(out_of_order, 0); 278 CHECK_INT(out_of_order, 0);
280 279
281 vector_clean_list(peer_list.peers.data, peer_list.peers.size); 280 vector_clean_list(peers.data, peers.size);
282} 281}
283 282
284static void case_redistribute_below_threshold(void) { 283static void case_redistribute_below_threshold(void) {
285 ot_peerlist peer_list; 284 ot_vector peers;
286 285
287 test_case("a small peer list is left flat"); 286 test_case("a small peer list is left flat");
288 build_flat_peerlist(&peer_list, 100); 287 build_flat_vector(&peers, 100);
289 CHECK(peer_list.peers.data != NULL); 288 CHECK(peers.data != NULL);
290 vector_redistribute_buckets(&peer_list, OT_PEER_SIZE4); 289 vector_redistribute_buckets(&peers, OT_PEER_SIZE4, 100);
291 CHECK_INT(OT_PEERLIST_HASBUCKETS(&peer_list), 0); 290 CHECK_INT(OT_VECTOR_HASBUCKETS(&peers), 0);
292 CHECK_INT(peer_list.peers.size, 100); 291 CHECK_INT(peers.size, 100);
293 free(peer_list.peers.data); 292 free(peers.data);
294} 293}
295 294
296void test_vector(void) { 295void test_vector(void) {