mirror of
https://github.com/NixOS/nix.git
synced 2025-11-18 00:12:43 +01:00
* It is tough to contribute to a project that doesn't use a formatter, * It is extra hard to contribute to a project which has configured the formatter, but ignores it for some files * Code formatting makes it harder to hide obscure / weird bugs by accident or on purpose, Let's rip the bandaid off? Note that PRs currently in flight should be able to be merged relatively easily by applying `clang-format` to their tip prior to merge.
56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
#include "nix/util/chunked-vector.hh"
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
namespace nix {
|
|
TEST(ChunkedVector, InitEmpty)
|
|
{
|
|
auto v = ChunkedVector<int, 2>(100);
|
|
ASSERT_EQ(v.size(), 0u);
|
|
}
|
|
|
|
TEST(ChunkedVector, GrowsCorrectly)
|
|
{
|
|
auto v = ChunkedVector<int, 2>(100);
|
|
for (uint32_t 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);
|
|
}
|
|
uint32_t 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);
|
|
}
|
|
}
|
|
|
|
} // namespace nix
|