Fix: Core: VectorList iterator after clear

Check for `used_vectors_` instead of the allocated size.
Improve iterator tests.

Pull Request: https://projects.blender.org/blender/blender/pulls/139541
This commit is contained in:
Miguel Pozo
2025-05-28 18:59:44 +02:00
parent 5c98be4940
commit cfa8c9d4ad
2 changed files with 23 additions and 3 deletions

View File

@@ -250,7 +250,7 @@ template<typename T, int64_t CapacityStart = 32, int64_t CapacityMax = 4096> cla
Iterator &operator++()
{
if (vector_list.vectors_[index_a].size() == index_b + 1) {
if (index_a + 1 == vector_list.vectors_.size()) {
if (index_a + 1 == vector_list.used_vectors_) {
/* Reached the end. */
index_b++;
}

View File

@@ -85,11 +85,12 @@ TEST(vectorlist, ConstIterator)
vec.append(9);
vec.append(16);
const VectorList<int> &const_ref = vec;
int i = 1;
int i = 0;
for (int value : const_ref) {
EXPECT_EQ(value, i * i);
i++;
EXPECT_EQ(value, i * i);
}
EXPECT_EQ(i, 4);
}
TEST(vectorlist, LimitIterator)
@@ -103,6 +104,25 @@ TEST(vectorlist, LimitIterator)
EXPECT_EQ(value, i);
i++;
}
EXPECT_EQ(i, 1024);
}
TEST(vectorlist, IteratorAfterClear)
{
VectorList<int, 8, 128> vec;
for (int64_t i : IndexRange(1024)) {
vec.append(int(i));
}
vec.clear();
for (int64_t i : IndexRange(512)) {
vec.append(int(-i));
}
int i = 0;
for (int value : vec) {
EXPECT_EQ(value, -i);
i++;
}
EXPECT_EQ(i, 512);
}
TEST(vectorlist, LimitIndexing)