Fixed: move assignment not working for non-empty containers (#759)

This commit is contained in:
Soma Veszelovszki 2023-09-12 12:03:19 +02:00 committed by John Wellbelove
parent 9311256931
commit 93091cff0f
19 changed files with 33 additions and 0 deletions

View File

@ -1448,6 +1448,8 @@ namespace etl
// Skip if doing self assignment
if (this != &rhs)
{
clear();
typename etl::imultiset<TKey, TCompare>::iterator from = rhs.begin();
while (from != rhs.end())

View File

@ -399,6 +399,7 @@ namespace etl
{
if (&rhs != this)
{
clear();
move(etl::move(rhs));
}
@ -535,6 +536,7 @@ namespace etl
{
if (&rhs != this)
{
etl::ipriority_queue<T, TContainer, TCompare>::clear();
etl::ipriority_queue<T, TContainer, TCompare>::move(etl::move(rhs));
}

View File

@ -815,6 +815,8 @@ namespace etl
// Skip if doing self assignment
if (this != &rhs)
{
this->clear();
typename etl::iset<TKey, TCompare>::iterator from = rhs.begin();
while (from != rhs.end())
@ -2603,6 +2605,8 @@ namespace etl
// Skip if doing self assignment
if (this != &rhs)
{
this->clear();
typename etl::iset<TKey, TCompare>::iterator from = rhs.begin();
while (from != rhs.end())

View File

@ -254,6 +254,7 @@ namespace
std::unique_ptr<uint32_t> p2(new uint32_t(2U));
std::unique_ptr<uint32_t> p3(new uint32_t(3U));
std::unique_ptr<uint32_t> p4(new uint32_t(4U));
std::unique_ptr<uint32_t> p5(new uint32_t(5U));
Data deque1;
deque1.push_back(std::move(p1));
@ -262,6 +263,7 @@ namespace
deque1.push_back(std::move(p4));
Data deque2;
deque2.push_back(std::move(p5));
deque2 = std::move(deque1);
CHECK_EQUAL(4U, deque2.size());
@ -298,6 +300,7 @@ namespace
std::unique_ptr<uint32_t> p2(new uint32_t(2U));
std::unique_ptr<uint32_t> p3(new uint32_t(3U));
std::unique_ptr<uint32_t> p4(new uint32_t(4U));
std::unique_ptr<uint32_t> p5(new uint32_t(5U));
Data deque1;
deque1.push_back(std::move(p1));
@ -306,6 +309,7 @@ namespace
deque1.push_back(std::move(p4));
Data deque2;
deque2.push_back(std::move(p5));
IData& ideque1 = deque1;
IData& ideque2 = deque2;

View File

@ -241,6 +241,7 @@ namespace
data1.push_front(std::move(p4));
DataM data2;
data2.push_front(ItemM(5U));
data2 = std::move(data1);
CHECK_EQUAL(0U, data1.size());
@ -269,6 +270,7 @@ namespace
data1.push_front(std::move(p4));
DataM data2;
data2.push_front(ItemM(5U));
IDataM& idata1 = data1;
IDataM& idata2 = data2;

View File

@ -312,6 +312,7 @@ namespace
std::unique_ptr<uint32_t> p2(new uint32_t(2U));
std::unique_ptr<uint32_t> p3(new uint32_t(3U));
std::unique_ptr<uint32_t> p4(new uint32_t(4U));
std::unique_ptr<uint32_t> p5(new uint32_t(5U));
Data data1;
data1.push_back(std::move(p1));
@ -325,6 +326,7 @@ namespace
CHECK(!bool(p4));
Data data2;
data2.push_back(std::move(p5));
data2 = std::move(data1);
CHECK_EQUAL(0U, data1.size());

View File

@ -364,6 +364,7 @@ namespace
std::unique_ptr<uint32_t> p2(new uint32_t(2U));
std::unique_ptr<uint32_t> p3(new uint32_t(3U));
std::unique_ptr<uint32_t> p4(new uint32_t(4U));
std::unique_ptr<uint32_t> p5(new uint32_t(5U));
Data data1(lookup1, pool1);
data1.push_back(std::move(p1));
@ -377,6 +378,7 @@ namespace
CHECK(!bool(p4));
Data data2(lookup2, pool2);
data2.push_back(std::move(p5));
data2 = std::move(data1);
CHECK_EQUAL(0U, data1.size());
@ -428,6 +430,7 @@ namespace
std::unique_ptr<uint32_t> p2(new uint32_t(2U));
std::unique_ptr<uint32_t> p3(new uint32_t(3U));
std::unique_ptr<uint32_t> p4(new uint32_t(4U));
std::unique_ptr<uint32_t> p5(new uint32_t(5U));
Data data1(lookup1, pool1);
data1.push_back(std::move(p1));
@ -436,6 +439,7 @@ namespace
data1.push_back(std::move(p4));
Data data2(lookup2, pool2);
data2.push_back(std::move(p5));
IData& idata1 = data1;
IData& idata2 = data2;

View File

@ -1228,6 +1228,7 @@ namespace
data1.push_back(std::move(p4));
DataM data2;
data2.push_back(ItemM(5U));
data2 = std::move(data1);
CHECK_EQUAL(0U, data1.size());
@ -1275,6 +1276,7 @@ namespace
data1.push_back(std::move(p4));
DataM data2;
data2.push_back(ItemM(5U));
IDataM& idata1 = data1;
IDataM& idata2 = data2;

View File

@ -389,6 +389,7 @@ namespace
data1.insert(DataM::value_type(std::string("3"), etl::move(d3)));
data1.insert(DataM::value_type(std::string("4"), ItemM(4)));
data2.insert(DataM::value_type(std::string("5"), ItemM(5)));
data2 = std::move(data1);
CHECK(1 == data2.at("1").value);

View File

@ -388,6 +388,7 @@ namespace
data1.insert(DataM::value_type(std::string("3"), etl::move(d3)));
data1.insert(DataM::value_type(std::string("4"), ItemM(4)));
data2.insert(DataM::value_type(std::string("5"), ItemM(5)));
data2 = std::move(data1);
CHECK(1 == data2.find("1")->second.value);

View File

@ -391,6 +391,7 @@ namespace
data1.insert(ItemM(4));
DataM data2;
data2.insert(ItemM(5));
data2 = std::move(data1);

View File

@ -527,6 +527,7 @@ namespace
priority_queue.push(std::move(b));
etl::priority_queue<ItemM, SIZE> priority_queue2;
priority_queue2.push(ItemM("E"));
priority_queue2 = std::move(priority_queue);

View File

@ -356,6 +356,7 @@ namespace
data1.insert(ItemM(4));
DataM data2;
data2.insert(ItemM(5));
data2 = std::move(data1);

View File

@ -462,6 +462,7 @@ namespace
data1.insert(DataM::value_type(std::string("3"), etl::move(d3)));
data1.insert(DataM::value_type(std::string("4"), ItemM(4)));
data2.insert(DataM::value_type(std::string("5"), ItemM(5)));
data2 = std::move(data1);
CHECK_EQUAL(1, data2.at("1").value);

View File

@ -414,6 +414,7 @@ namespace
data1.insert(DataM::value_type(std::string("4"), ItemM(4)));
data2 = std::move(data1);
data2.insert(DataM::value_type(std::string("5"), ItemM(5)));
CHECK_EQUAL(1, data2.find("1")->second.value);
CHECK_EQUAL(2, data2.find("2")->second.value);

View File

@ -357,6 +357,7 @@ namespace
data1.insert(ItemM(4));
DataM data2;
data2.insert(ItemM(5));
data2 = std::move(data1);

View File

@ -341,6 +341,7 @@ namespace
data1.insert(ItemM(4));
DataM data2;
data2.insert(ItemM(5));
data2 = std::move(data1);

View File

@ -216,6 +216,7 @@ namespace
{
Data data(initial_data.begin(), initial_data.end());
Data other_data;
other_data.push_back(1);
other_data = std::move(data);

View File

@ -360,6 +360,7 @@ namespace
{
Data data(initial_data.begin(), initial_data.end());
Data other_data;
other_data.push_back(nullptr);
other_data = std::move(data);