fix: take indices to messages as a hint (#5683)
This commit is contained in:
+138
-5
@@ -114,20 +114,153 @@ TEST(LimitedQueue, PushFront)
|
||||
|
||||
TEST(LimitedQueue, ReplaceItem)
|
||||
{
|
||||
LimitedQueue<int> queue(5);
|
||||
LimitedQueue<int> queue(10);
|
||||
queue.pushBack(1);
|
||||
queue.pushBack(2);
|
||||
queue.pushBack(3);
|
||||
queue.pushBack(4);
|
||||
queue.pushBack(5);
|
||||
queue.pushBack(6);
|
||||
|
||||
int idex = queue.replaceItem(2, 10);
|
||||
EXPECT_EQ(idex, 1);
|
||||
idex = queue.replaceItem(5, 11);
|
||||
idex = queue.replaceItem(7, 11);
|
||||
EXPECT_EQ(idex, -1);
|
||||
|
||||
bool res = queue.replaceItem(std::size_t(0), 9);
|
||||
int prev = -1;
|
||||
bool res = queue.replaceItem(std::size_t(0), 9, &prev);
|
||||
EXPECT_TRUE(res);
|
||||
res = queue.replaceItem(std::size_t(5), 4);
|
||||
EXPECT_EQ(prev, 1);
|
||||
res = queue.replaceItem(std::size_t(6), 4);
|
||||
EXPECT_FALSE(res);
|
||||
|
||||
SNAPSHOT_EQUALS(queue.getSnapshot(), {9, 10, 3}, "first snapshot");
|
||||
// correct hint
|
||||
EXPECT_EQ(queue.replaceItem(3, 4, 11), 3);
|
||||
// incorrect hints
|
||||
EXPECT_EQ(queue.replaceItem(5, 11, 12), 3);
|
||||
EXPECT_EQ(queue.replaceItem(0, 12, 13), 3);
|
||||
// oob hint
|
||||
EXPECT_EQ(queue.replaceItem(42, 13, 14), 3);
|
||||
// bad needle
|
||||
EXPECT_EQ(queue.replaceItem(0, 15, 16), -1);
|
||||
|
||||
SNAPSHOT_EQUALS(queue.getSnapshot(), {9, 10, 3, 14, 5, 6},
|
||||
"first snapshot");
|
||||
}
|
||||
|
||||
TEST(LimitedQueue, Find)
|
||||
{
|
||||
LimitedQueue<int> queue(10);
|
||||
queue.pushBack(1);
|
||||
queue.pushBack(2);
|
||||
queue.pushBack(3);
|
||||
queue.pushBack(4);
|
||||
queue.pushBack(5);
|
||||
queue.pushBack(6);
|
||||
|
||||
// without hint
|
||||
EXPECT_FALSE(queue
|
||||
.find([](int i) {
|
||||
return i == 0;
|
||||
})
|
||||
.has_value());
|
||||
EXPECT_EQ(queue
|
||||
.find([](int i) {
|
||||
return i == 1;
|
||||
})
|
||||
.value(),
|
||||
1);
|
||||
EXPECT_EQ(queue
|
||||
.find([](int i) {
|
||||
return i == 2;
|
||||
})
|
||||
.value(),
|
||||
2);
|
||||
EXPECT_EQ(queue
|
||||
.find([](int i) {
|
||||
return i == 6;
|
||||
})
|
||||
.value(),
|
||||
6);
|
||||
EXPECT_FALSE(queue
|
||||
.find([](int i) {
|
||||
return i == 7;
|
||||
})
|
||||
.has_value());
|
||||
EXPECT_FALSE(queue
|
||||
.find([](int i) {
|
||||
return i > 6;
|
||||
})
|
||||
.has_value());
|
||||
EXPECT_FALSE(queue
|
||||
.find([](int i) {
|
||||
return i <= 0;
|
||||
})
|
||||
.has_value());
|
||||
|
||||
using Pair = std::pair<size_t, int>;
|
||||
// with hint
|
||||
EXPECT_FALSE(queue
|
||||
.find(0,
|
||||
[](int i) {
|
||||
return i == 0;
|
||||
})
|
||||
.has_value());
|
||||
// correct hint
|
||||
EXPECT_EQ(queue
|
||||
.find(0,
|
||||
[](int i) {
|
||||
return i == 1;
|
||||
})
|
||||
.value(),
|
||||
(Pair{0, 1}));
|
||||
EXPECT_EQ(queue
|
||||
.find(1,
|
||||
[](int i) {
|
||||
return i == 2;
|
||||
})
|
||||
.value(),
|
||||
(Pair{1, 2}));
|
||||
// incorrect hint
|
||||
EXPECT_EQ(queue
|
||||
.find(1,
|
||||
[](int i) {
|
||||
return i == 1;
|
||||
})
|
||||
.value(),
|
||||
(Pair{0, 1}));
|
||||
EXPECT_EQ(queue
|
||||
.find(5,
|
||||
[](int i) {
|
||||
return i == 6;
|
||||
})
|
||||
.value(),
|
||||
(Pair{5, 6}));
|
||||
// oob hint
|
||||
EXPECT_EQ(queue
|
||||
.find(6,
|
||||
[](int i) {
|
||||
return i == 3;
|
||||
})
|
||||
.value(),
|
||||
(Pair{2, 3}));
|
||||
// non-existent items
|
||||
EXPECT_FALSE(queue
|
||||
.find(42,
|
||||
[](int i) {
|
||||
return i == 7;
|
||||
})
|
||||
.has_value());
|
||||
EXPECT_FALSE(queue
|
||||
.find(0,
|
||||
[](int i) {
|
||||
return i > 6;
|
||||
})
|
||||
.has_value());
|
||||
EXPECT_FALSE(queue
|
||||
.find(0,
|
||||
[](int i) {
|
||||
return i <= 0;
|
||||
})
|
||||
.has_value());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user