Fix for unordered_multimap, unordered_set and unordered_multiset insert and erase bug.

This commit is contained in:
John Wellbelove 2019-02-13 20:32:13 +01:00
parent 25ecc38700
commit b5b480c051
2 changed files with 60 additions and 0 deletions

View File

@ -614,5 +614,35 @@ namespace
data.assign(initial_data.begin(), initial_data.end());
CHECK_CLOSE(2.0, data.load_factor(), 0.01);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_insert_and_erase_bug)
{
etl::unordered_multimap<uint32_t, char, 5> map;
map.insert(std::make_pair(1, 'b'));
map.insert(std::make_pair(2, 'c'));
map.insert(std::make_pair(3, 'd'));
map.insert(std::make_pair(4, 'e'));
auto it = map.find(1);
map.erase(it);
it = map.find(4);
map.erase(it);
std::vector<std::string> s;
for (const auto &kv : map)
{
std::stringstream ss;
ss << "map[" << kv.first << "] = " << kv.second;
s.push_back(ss.str());
}
CHECK_EQUAL(2, s.size());
CHECK_EQUAL("map[2] = c", s[0]);
CHECK_EQUAL("map[3] = d", s[1]);
}
};
}

View File

@ -453,5 +453,35 @@ namespace
data.assign(initial_data.begin(), initial_data.end());
CHECK_CLOSE(2.0, data.load_factor(), 0.01);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_insert_and_erase_bug)
{
etl::unordered_set<uint32_t, 5> set;
set.insert(1);
set.insert(2);
set.insert(3);
set.insert(4);
auto it = set.find(1);
set.erase(it);
it = set.find(4);
set.erase(it);
std::vector<std::string> s;
for (const auto &kv : set)
{
std::stringstream ss;
ss << "set" << " = " << kv;
s.push_back(ss.str());
}
CHECK_EQUAL(2, s.size());
CHECK_EQUAL("set = 2", s[0]);
CHECK_EQUAL("set = 3", s[1]);
}
};
}