Remove loops from Dict iterator invalidation unit test

This fixes Coverity finding 1490366
This commit is contained in:
Tim Wojtulewicz 2022-07-01 14:35:54 -07:00
parent ba968434e4
commit 035c543e9f

View file

@ -350,33 +350,27 @@ TEST_CASE("dict iterator invalidation")
detail::HashKey* it_key; detail::HashKey* it_key;
bool iterators_invalidated = false; bool iterators_invalidated = false;
for ( auto it = dict.begin(); it != dict.end(); ++it ) auto it = dict.begin();
{ iterators_invalidated = false;
iterators_invalidated = false; dict.Remove(key3, &iterators_invalidated);
dict.Remove(key3, &iterators_invalidated); // Key doesn't exist, nothing to remove, iteration not invalidated.
// Key doesn't exist, nothing to remove, iteration not invalidated. CHECK(! iterators_invalidated);
CHECK(! iterators_invalidated);
iterators_invalidated = false; iterators_invalidated = false;
dict.Insert(key, &val2, &iterators_invalidated); dict.Insert(key, &val2, &iterators_invalidated);
// Key exists, value gets overwritten, iteration not invalidated. // Key exists, value gets overwritten, iteration not invalidated.
CHECK(! iterators_invalidated); CHECK(! iterators_invalidated);
iterators_invalidated = false; iterators_invalidated = false;
dict.Remove(key2, &iterators_invalidated); dict.Remove(key2, &iterators_invalidated);
// Key exists, gets removed, iteration is invalidated. // Key exists, gets removed, iteration is invalidated.
CHECK(iterators_invalidated); CHECK(iterators_invalidated);
break;
}
for ( auto it = dict.begin(); it != dict.end(); ++it ) it = dict.begin();
{ iterators_invalidated = false;
iterators_invalidated = false; dict.Insert(key3, &val3, &iterators_invalidated);
dict.Insert(key3, &val3, &iterators_invalidated); // Key doesn't exist, gets inserted, iteration is invalidated.
// Key doesn't exist, gets inserted, iteration is invalidated. CHECK(iterators_invalidated);
CHECK(iterators_invalidated);
break;
}
CHECK(dict.Length() == 2); CHECK(dict.Length() == 2);
CHECK(*static_cast<uint32_t*>(dict.Lookup(key)) == val2); CHECK(*static_cast<uint32_t*>(dict.Lookup(key)) == val2);