diff options
Diffstat (limited to 'tests/t_vector.c')
| -rw-r--r-- | tests/t_vector.c | 61 |
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. */ |
| 203 | static void build_flat_peerlist(ot_peerlist *peer_list, size_t count) { | 203 | static 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 | ||
| 223 | static void case_redistribute_holds_every_peer(void) { | 222 | static 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 | ||
| 258 | static void case_redistribute_sorts_each_bucket(void) { | 257 | static 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 | ||
| 284 | static void case_redistribute_below_threshold(void) { | 283 | static 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 | ||
| 296 | void test_vector(void) { | 295 | void test_vector(void) { |
