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);
}
Exemple #2
0
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);
}