|
3 | 3 | //
|
4 | 4 | #include "core/bptree_set.h"
|
5 | 5 |
|
| 6 | +#include <absl/container/btree_set.h> |
6 | 7 | #include <mimalloc.h>
|
7 | 8 |
|
8 | 9 | #include <random>
|
@@ -320,6 +321,38 @@ TEST_F(BPTreeSetTest, DeleteRange) {
|
320 | 321 | }
|
321 | 322 | }
|
322 | 323 |
|
| 324 | +TEST_F(BPTreeSetTest, MemoryUsage) { |
| 325 | + zskiplist* zsl = zslCreate(); |
| 326 | + std::vector<sds> sds_vec; |
| 327 | + for (size_t i = 0; i < 10'000; ++i) { |
| 328 | + sds_vec.push_back(sdsnew("f")); |
| 329 | + } |
| 330 | + size_t sz_before = zmalloc_used_memory_tl; |
| 331 | + LOG(INFO) << "zskiplist before: " << sz_before << " bytes"; |
| 332 | + |
| 333 | + for (size_t i = 0; i < sds_vec.size(); ++i) { |
| 334 | + zslInsert(zsl, i, sds_vec[i]); |
| 335 | + } |
| 336 | + LOG(INFO) << "zskiplist took: " << zmalloc_used_memory_tl - sz_before << " bytes"; |
| 337 | + zslFree(zsl); |
| 338 | + |
| 339 | + sds_vec.clear(); |
| 340 | + for (size_t i = 0; i < 10'000; ++i) { |
| 341 | + sds_vec.push_back(sdsnew("f")); |
| 342 | + } |
| 343 | + |
| 344 | + MiMemoryResource mi_alloc(mi_heap_get_backing()); |
| 345 | + using AllocType = PMR_NS::polymorphic_allocator<std::pair<double, sds>>; |
| 346 | + AllocType alloc(&mi_alloc); |
| 347 | + absl::btree_set<pair<double, sds>, std::greater<pair<double, sds>>, AllocType> btree(alloc); |
| 348 | + |
| 349 | + LOG(INFO) << "btree before: " << mi_alloc.used() << " bytes"; |
| 350 | + for (size_t i = 0; i < sds_vec.size(); ++i) { |
| 351 | + btree.emplace(i, sds_vec[i]); |
| 352 | + } |
| 353 | + LOG(INFO) << "btree after: " << mi_alloc.used() << " bytes"; |
| 354 | +} |
| 355 | + |
323 | 356 | struct ZsetPolicy {
|
324 | 357 | struct KeyT {
|
325 | 358 | double d;
|
|
0 commit comments