forked from lix-project/lix
Add some tests for ChunkedVector
This commit is contained in:
parent
7ca6fbc8ca
commit
484badfa09
54
src/libutil/tests/chunked-vector.cc
Normal file
54
src/libutil/tests/chunked-vector.cc
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
#include "chunked-vector.hh"
|
||||||
|
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
TEST(ChunkedVector, InitEmpty) {
|
||||||
|
auto v = ChunkedVector<int, 2>(100);
|
||||||
|
ASSERT_EQ(v.size(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(ChunkedVector, GrowsCorrectly) {
|
||||||
|
auto v = ChunkedVector<int, 2>(100);
|
||||||
|
for (auto i = 1; i < 20; i++) {
|
||||||
|
v.add(i);
|
||||||
|
ASSERT_EQ(v.size(), i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(ChunkedVector, AddAndGet) {
|
||||||
|
auto v = ChunkedVector<int, 2>(100);
|
||||||
|
for (auto i = 1; i < 20; i++) {
|
||||||
|
auto [i2, idx] = v.add(i);
|
||||||
|
auto & i3 = v[idx];
|
||||||
|
ASSERT_EQ(i, i2);
|
||||||
|
ASSERT_EQ(&i2, &i3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(ChunkedVector, ForEach) {
|
||||||
|
auto v = ChunkedVector<int, 2>(100);
|
||||||
|
for (auto i = 1; i < 20; i++) {
|
||||||
|
v.add(i);
|
||||||
|
}
|
||||||
|
int count = 0;
|
||||||
|
v.forEach([&count](int elt) {
|
||||||
|
count++;
|
||||||
|
});
|
||||||
|
ASSERT_EQ(count, v.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(ChunkedVector, OverflowOK) {
|
||||||
|
// Similar to the AddAndGet, but intentionnally use a small
|
||||||
|
// initial ChunkedVector to force it to overflow
|
||||||
|
auto v = ChunkedVector<int, 2>(2);
|
||||||
|
for (auto i = 1; i < 20; i++) {
|
||||||
|
auto [i2, idx] = v.add(i);
|
||||||
|
auto & i3 = v[idx];
|
||||||
|
ASSERT_EQ(i, i2);
|
||||||
|
ASSERT_EQ(&i2, &i3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue