TEST(TimeoutQueue, RunOnceRepeating) { int count = 0; TimeoutQueue q; TimeoutQueue::Callback cb = [&count, &q](TimeoutQueue::Id id, int64_t now) { if (++count == 100) { EXPECT_TRUE(q.erase(id)); } }; EXPECT_EQ(1, q.addRepeating(0, 0, cb)); EXPECT_EQ(0, q.runOnce(0)); EXPECT_EQ(1, count); EXPECT_EQ(0, q.runOnce(0)); EXPECT_EQ(2, count); EXPECT_EQ(std::numeric_limits<int64_t>::max(), q.runLoop(0)); EXPECT_EQ(100, count); }
TEST(TimeoutQueue, RunOnceReschedule) { int count = 0; TimeoutQueue q; TimeoutQueue::Callback cb; cb = [&count, &q, &cb](TimeoutQueue::Id id, int64_t now) { if (++count < 100) { EXPECT_LT(id, q.add(now, 0, cb)); } }; EXPECT_EQ(1, q.add(0, 0, cb)); EXPECT_EQ(0, q.runOnce(0)); EXPECT_EQ(1, count); EXPECT_EQ(0, q.runOnce(0)); EXPECT_EQ(2, count); EXPECT_EQ(std::numeric_limits<int64_t>::max(), q.runLoop(0)); EXPECT_EQ(100, count); }