|
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>
|
@@ -285,6 +286,38 @@ TEST_F(BPTreeSetTest, DeleteRange) {
|
285 | 286 | }
|
286 | 287 | }
|
287 | 288 |
|
| 289 | +TEST_F(BPTreeSetTest, MemoryUsage) { |
| 290 | + zskiplist* zsl = zslCreate(); |
| 291 | + std::vector<sds> sds_vec; |
| 292 | + for (size_t i = 0; i < 10'000; ++i) { |
| 293 | + sds_vec.push_back(sdsnew("f")); |
| 294 | + } |
| 295 | + size_t sz_before = zmalloc_used_memory_tl; |
| 296 | + LOG(INFO) << "zskiplist before: " << sz_before << " bytes"; |
| 297 | + |
| 298 | + for (size_t i = 0; i < sds_vec.size(); ++i) { |
| 299 | + zslInsert(zsl, i, sds_vec[i]); |
| 300 | + } |
| 301 | + LOG(INFO) << "zskiplist took: " << zmalloc_used_memory_tl - sz_before << " bytes"; |
| 302 | + zslFree(zsl); |
| 303 | + |
| 304 | + sds_vec.clear(); |
| 305 | + for (size_t i = 0; i < 10'000; ++i) { |
| 306 | + sds_vec.push_back(sdsnew("f")); |
| 307 | + } |
| 308 | + |
| 309 | + MiMemoryResource mi_alloc(mi_heap_get_backing()); |
| 310 | + using AllocType = PMR_NS::polymorphic_allocator<std::pair<double, sds>>; |
| 311 | + AllocType alloc(&mi_alloc); |
| 312 | + absl::btree_set<pair<double, sds>, std::greater<pair<double, sds>>, AllocType> btree(alloc); |
| 313 | + |
| 314 | + LOG(INFO) << "btree before: " << mi_alloc.used() << " bytes"; |
| 315 | + for (size_t i = 0; i < sds_vec.size(); ++i) { |
| 316 | + btree.emplace(i, sds_vec[i]); |
| 317 | + } |
| 318 | + LOG(INFO) << "btree after: " << mi_alloc.used() << " bytes"; |
| 319 | +} |
| 320 | + |
288 | 321 | struct ZsetPolicy {
|
289 | 322 | struct KeyT {
|
290 | 323 | double d;
|
|
0 commit comments