#include #include namespace NYT { namespace { //////////////////////////////////////////////////////////////////////////////// TInstant operator""_ts(unsigned long long seconds) { return TInstant::Zero() + TDuration::Seconds(seconds); } //////////////////////////////////////////////////////////////////////////////// TEST(TExpiringSetTest, Empty) { TExpiringSet set; EXPECT_EQ(set.GetSize(), 0); } TEST(TExpiringSetTest, ExpireSingle) { TExpiringSet 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 set; set.SetTtl(TDuration::Seconds(2)); set.InsertMany(0_ts, std::vector{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 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 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 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)); } TEST(TExpiringSetTest, RemoveBeforeExpire) { TExpiringSet set; set.SetTtl(TDuration::Seconds(1)); set.Insert(0_ts, 1); EXPECT_EQ(set.GetSize(), 1); EXPECT_TRUE(set.Contains(1)); set.Remove(1); EXPECT_EQ(set.GetSize(), 0); EXPECT_FALSE(set.Contains(1)); } TEST(TExpiringSetTest, RemoveAfterExpire) { TExpiringSet set; set.SetTtl(TDuration::Seconds(1)); set.Insert(0_ts, 1); set.Expire(2_ts); EXPECT_EQ(set.GetSize(), 0); EXPECT_FALSE(set.Contains(1)); set.Remove(1); EXPECT_EQ(set.GetSize(), 0); EXPECT_FALSE(set.Contains(1)); } //////////////////////////////////////////////////////////////////////////////// } // namespace } // namespace NYT