aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/cache/ut
diff options
context:
space:
mode:
authorivanmautin <ivanmautin@yandex-team.com>2024-05-06 11:33:58 +0300
committerivanmautin <ivanmautin@yandex-team.com>2024-05-06 11:45:11 +0300
commitdb9340f74578f02054d56b136a9faccfe7e29eb4 (patch)
tree22247474ed2f686c3e8432bfd85661ede5cfc810 /library/cpp/cache/ut
parent1b5ecadf895a68f8dc21bb0901b78fa1a9b6e347 (diff)
downloadydb-db9340f74578f02054d56b136a9faccfe7e29eb4.tar.gz
Add TotalSize and Size methods
Раньше метод GetTotalSize() был только в TLRUList, хотя TSizeProvider присутствовал также в TLRUList Добавил GetTotalSize() во все листы (в том числе TLWList), а также метод GetSize(), который возвращает текущее количество Также добавил эти методы в сами TCache и TThreadSafeCache c103617d7259841e1c273cadd8dbf0bb019e52dc
Diffstat (limited to 'library/cpp/cache/ut')
-rw-r--r--library/cpp/cache/ut/cache_ut.cpp75
1 files changed, 73 insertions, 2 deletions
diff --git a/library/cpp/cache/ut/cache_ut.cpp b/library/cpp/cache/ut/cache_ut.cpp
index 33731988c1..36a3eff094 100644
--- a/library/cpp/cache/ut/cache_ut.cpp
+++ b/library/cpp/cache/ut/cache_ut.cpp
@@ -15,10 +15,14 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
TListType::TItem x1(1, "ttt");
list.Insert(&x1);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 1);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 1);
UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1);
TListType::TItem x2(2, "yyy");
list.Insert(&x2);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 2);
UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1);
list.Promote(list.GetOldest());
@@ -26,6 +30,8 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
TListType::TItem x3(3, "zzz");
list.Insert(&x3);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 2);
UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1);
}
@@ -39,12 +45,16 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
list.Insert(&x1);
while (list.RemoveIfOverflown()) {
}
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 3);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 1);
UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1);
TListType::TItem x2(2, "yyy");
list.Insert(&x2);
while (list.RemoveIfOverflown()) {
}
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 6);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 2);
UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1);
list.Promote(list.GetOldest());
@@ -56,13 +66,25 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
list.Insert(&x3);
while (list.RemoveIfOverflown()) {
}
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 6);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 2);
UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1);
TListType::TItem x4(4, "longlong");
list.Insert(&x4);
while (list.RemoveIfOverflown()) {
}
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 8);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 1);
UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 4);
+
+ TListType::TItem x5(5, "xxx");
+ list.Insert(&x5);
+ while (list.RemoveIfOverflown()) {
+ }
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 3);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 1);
+ UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 5);
}
Y_UNIT_TEST(LFUListTest) {
@@ -71,10 +93,14 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
TListType::TItem x1(1, "ttt");
list.Insert(&x1);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 1);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 1);
UNIT_ASSERT_EQUAL(list.GetLeastFrequentlyUsed()->Key, 1);
TListType::TItem x2(2, "yyy");
list.Insert(&x2);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 2);
UNIT_ASSERT_EQUAL(list.GetLeastFrequentlyUsed()->Key, 1);
list.Promote(list.GetLeastFrequentlyUsed());
@@ -82,6 +108,8 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
TListType::TItem x3(3, "zzz");
list.Insert(&x3);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2);
+ UNIT_ASSERT_EQUAL(list.GetSize(), 2);
UNIT_ASSERT_EQUAL(list.GetLeastFrequentlyUsed()->Key, 1);
}
@@ -92,25 +120,30 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
TListType::TItem x1(1, "tt");
list.Insert(&x1);
UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 1);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 1);
UNIT_ASSERT_EQUAL(list.GetSize(), 1);
TListType::TItem x2(2, "yyyy");
list.Insert(&x2);
UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 1);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2);
UNIT_ASSERT_EQUAL(list.GetSize(), 2);
TListType::TItem x3(3, "z");
list.Insert(&x3);
UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 1);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2);
UNIT_ASSERT_EQUAL(list.GetSize(), 2);
TListType::TItem x4(4, "xxxxxx");
list.Insert(&x4);
UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 2);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2);
UNIT_ASSERT_EQUAL(list.GetSize(), 2);
list.Erase(&x2);
UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 4);
+ UNIT_ASSERT_EQUAL(list.GetTotalSize(), 1);
UNIT_ASSERT_EQUAL(list.GetSize(), 1);
}
@@ -118,11 +151,17 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
typedef TLRUCache<int, TString> TCache;
TCache s(2); // size 2
s.Insert(1, "abcd");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 1);
+ UNIT_ASSERT_EQUAL(s.Size(), 1);
UNIT_ASSERT(s.Find(1) != s.End());
UNIT_ASSERT_EQUAL(*s.Find(1), "abcd");
s.Insert(2, "defg");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 2);
+ UNIT_ASSERT_EQUAL(s.Size(), 2);
UNIT_ASSERT(s.GetOldest() == "abcd");
s.Insert(3, "hjkl");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 2);
+ UNIT_ASSERT_EQUAL(s.Size(), 2);
UNIT_ASSERT(s.GetOldest() == "defg");
// key 1 will be deleted
UNIT_ASSERT(s.Find(1) == s.End());
@@ -135,9 +174,13 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
UNIT_ASSERT(*s.Find(3) == "hjkl");
s.Update(3, "abcd");
UNIT_ASSERT(*s.Find(3) == "abcd");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 2);
+ UNIT_ASSERT_EQUAL(s.Size(), 2);
TCache::TIterator it = s.Find(3);
s.Erase(it);
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 1);
+ UNIT_ASSERT_EQUAL(s.Size(), 1);
UNIT_ASSERT(s.Find(3) == s.End());
}
@@ -145,13 +188,21 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
typedef TLRUCache<int, TString, TNoopDelete, size_t(*)(const TString&)> TCache;
TCache s(10, false, [](auto& string) { return string.size(); }); // size 10
s.Insert(1, "abcd");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 4);
+ UNIT_ASSERT_EQUAL(s.Size(), 1);
UNIT_ASSERT(s.Find(1) != s.End());
UNIT_ASSERT_EQUAL(*s.Find(1), "abcd");
s.Insert(2, "defg");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 8);
+ UNIT_ASSERT_EQUAL(s.Size(), 2);
UNIT_ASSERT(s.GetOldest() == "abcd");
s.Insert(3, "2c");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 10);
+ UNIT_ASSERT_EQUAL(s.Size(), 3);
UNIT_ASSERT(s.GetOldest() == "abcd");
s.Insert(4, "hjkl");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 10);
+ UNIT_ASSERT_EQUAL(s.Size(), 3);
UNIT_ASSERT(s.GetOldest() == "defg");
// key 1 will be deleted
UNIT_ASSERT(s.Find(1) == s.End());
@@ -165,10 +216,14 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
UNIT_ASSERT(!s.Insert(3, "abcd"));
UNIT_ASSERT(*s.Find(3) == "2c");
s.Update(3, "abcd");
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 8);
+ UNIT_ASSERT_EQUAL(s.Size(), 2);
UNIT_ASSERT(*s.Find(3) == "abcd");
TCache::TIterator it = s.Find(3);
s.Erase(it);
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 4);
+ UNIT_ASSERT_EQUAL(s.Size(), 1);
UNIT_ASSERT(s.Find(3) == s.End());
}
@@ -317,10 +372,14 @@ Y_UNIT_TEST_SUITE(TCacheTest) {
UNIT_ASSERT(s.Insert(1, "abcd"));
UNIT_ASSERT(s.Insert(1, "bcde"));
UNIT_ASSERT(s.Insert(2, "fghi"));
- UNIT_ASSERT(s.Insert(2, "ghij"));
// (1, "abcd") will be deleted
- UNIT_ASSERT(*s.Find(1) == "bcde");
+ UNIT_ASSERT(s.Insert(2, "ghij"));
+
+ UNIT_ASSERT_EQUAL(s.TotalSize(), 3);
+ UNIT_ASSERT_EQUAL(s.Size(), 3);
+
// (1, "bcde") will be promoted
+ UNIT_ASSERT(*s.Find(1) == "bcde");
UNIT_ASSERT(*s.FindOldest() == "fghi");
}
@@ -449,6 +508,8 @@ Y_UNIT_TEST_SUITE(TThreadSafeCacheTest) {
cache.Update(2, MakeAtomicShared<TString>("hjk"));
item = cache.Get(2);
+ UNIT_ASSERT_EQUAL(cache.TotalSize(), 1);
+ UNIT_ASSERT_EQUAL(cache.Size(), 1);
UNIT_ASSERT(callbacks.Creations == 0);
UNIT_ASSERT(*item == "hjk");
}
@@ -484,6 +545,8 @@ Y_UNIT_TEST_SUITE(TThreadSafeCacheUnsafeTest) {
UNIT_ASSERT(*data == VALS[i]);
}
}
+ UNIT_ASSERT_EQUAL(cache.TotalSize(), Y_ARRAY_SIZE(VALS) - 1);
+ UNIT_ASSERT_EQUAL(cache.Size(), Y_ARRAY_SIZE(VALS) - 1);
}
}
@@ -532,6 +595,8 @@ Y_UNIT_TEST_SUITE(TThreadSafeLRUCacheTest) {
cache.Update(2, MakeAtomicShared<TString>("hjk"));
item = cache.Get(2);
+ UNIT_ASSERT_EQUAL(cache.TotalSize(), 1);
+ UNIT_ASSERT_EQUAL(cache.Size(), 1);
UNIT_ASSERT(callbacks.Creations == 0);
UNIT_ASSERT(*item == "hjk");
}
@@ -630,17 +695,23 @@ Y_UNIT_TEST_SUITE(TThreadSafeLRUCacheTest) {
UNIT_ASSERT_EQUAL(callbacks.Creations, expectedCreations);
UNIT_ASSERT(*item == "one");
+ UNIT_ASSERT_EQUAL(cache.TotalSize(), 3);
+ UNIT_ASSERT_EQUAL(cache.Size(), 3);
cache.SetMaxSize(4);
item = cache.Get(0);
expectedCreations++;
UNIT_ASSERT_EQUAL(callbacks.Creations, expectedCreations);
UNIT_ASSERT(*item == "zero");
+ UNIT_ASSERT_EQUAL(cache.TotalSize(), 4);
+ UNIT_ASSERT_EQUAL(cache.Size(), 4);
item = cache.Get(4);
expectedCreations++;
UNIT_ASSERT_EQUAL(callbacks.Creations, expectedCreations);
UNIT_ASSERT(*item == "four");
+ UNIT_ASSERT_EQUAL(cache.TotalSize(), 4);
+ UNIT_ASSERT_EQUAL(cache.Size(), 4);
item = cache.Get(3);
expectedCreations++;