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:
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user