diff options
author | babenko <babenko@yandex-team.com> | 2024-09-30 15:33:57 +0300 |
---|---|---|
committer | babenko <babenko@yandex-team.com> | 2024-09-30 15:49:23 +0300 |
commit | d4f5e798223ea2abf44ad38eab5673e1ee4654b0 (patch) | |
tree | d3b0ab47d006a6f2c6f5459293ea950320b3e222 /library/cpp/yt/containers/unittests/expiring_set_ut.cpp | |
parent | fd3ee9bf6fcc6b810969bf83f7e3e622061957da (diff) | |
download | ydb-d4f5e798223ea2abf44ad38eab5673e1ee4654b0.tar.gz |
Extract TExpiringSet to library/cpp/containers
commit_hash:dd1c08771b1d4865d03a492927afa0f9895a5f44
Diffstat (limited to 'library/cpp/yt/containers/unittests/expiring_set_ut.cpp')
-rw-r--r-- | library/cpp/yt/containers/unittests/expiring_set_ut.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/library/cpp/yt/containers/unittests/expiring_set_ut.cpp b/library/cpp/yt/containers/unittests/expiring_set_ut.cpp new file mode 100644 index 0000000000..e9f2743a80 --- /dev/null +++ b/library/cpp/yt/containers/unittests/expiring_set_ut.cpp @@ -0,0 +1,102 @@ +#include <library/cpp/yt/containers/expiring_set.h> + +#include <library/cpp/testing/gtest/gtest.h> + +namespace NYT { +namespace { + +//////////////////////////////////////////////////////////////////////////////// + +TInstant operator""_ts(unsigned long long seconds) +{ + return TInstant::Zero() + TDuration::Seconds(seconds); +} + +//////////////////////////////////////////////////////////////////////////////// + +TEST(TExpiringSetTest, Empty) +{ + TExpiringSet<int> set; + EXPECT_EQ(set.GetSize(), 0); +} + +TEST(TExpiringSetTest, ExpireSingle) +{ + TExpiringSet<int> set; + set.SetTTl(TDuration::Seconds(2)); + + set.Insert(0_ts, 1); + EXPECT_EQ(set.GetSize(), 1); + + set.Expire(1_ts); + EXPECT_EQ(set.GetSize(), 1); + + set.Expire(2_ts); + EXPECT_EQ(set.GetSize(), 0); +} + +TEST(TExpiringSetTest, ExpireBatch) +{ + TExpiringSet<int> set; + set.SetTTl(TDuration::Seconds(2)); + + set.InsertMany(0_ts, std::vector<int>{1, 2, 3}); + EXPECT_EQ(set.GetSize(), 3); + + set.Expire(1_ts); + EXPECT_EQ(set.GetSize(), 3); + + set.Expire(2_ts); + EXPECT_EQ(set.GetSize(), 0); +} + +TEST(TExpiringSetTest, Reinsert) +{ + TExpiringSet<int> set; + set.SetTTl(TDuration::Seconds(2)); + + set.Insert(0_ts, 1); + EXPECT_EQ(set.GetSize(), 1); + + set.Insert(1_ts, 1); + EXPECT_EQ(set.GetSize(), 1); + + set.Expire(2_ts); + EXPECT_EQ(set.GetSize(), 1); + + set.Expire(3_ts); + EXPECT_EQ(set.GetSize(), 0); +} + +TEST(TExpiringSetTest, Contains) +{ + TExpiringSet<int> set; + set.SetTTl(TDuration::Seconds(1)); + + EXPECT_FALSE(set.Contains(1)); + + set.Insert(0_ts, 1); + EXPECT_TRUE(set.Contains(1)); + + set.Expire(1_ts); + EXPECT_FALSE(set.Contains(1)); +} + +TEST(TExpiringSetTest, Clear) +{ + TExpiringSet<int> set; + set.SetTTl(TDuration::Seconds(1)); + + set.Insert(0_ts, 1); + EXPECT_EQ(set.GetSize(), 1); + EXPECT_TRUE(set.Contains(1)); + + set.Clear(); + EXPECT_EQ(set.GetSize(), 0); + EXPECT_FALSE(set.Contains(1)); +} + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace +} // namespace NYT |