Fixed copy and move assignment bug

This commit is contained in:
John Wellbelove 2021-06-22 11:00:42 +01:00
parent e090f1a18c
commit 60b04b55f6
3 changed files with 67 additions and 6 deletions

View File

@ -1088,6 +1088,7 @@ namespace etl
{
if (this != &other)
{
this->clear();
this->push(other.begin(), other.end());
}
@ -1119,8 +1120,10 @@ namespace etl
{
if (this != &other)
{
this->clear();
for (typename etl::icircular_buffer<T>::const_iterator itr = other.begin(); itr != other.end(); ++itr)
{
{
this->push(etl::move(*itr));
}
}
@ -1203,8 +1206,10 @@ namespace etl
//*************************************************************************
circular_buffer_ext& operator =(const circular_buffer_ext& other)
{
if (this != &other)
{
this->clear();
this->push(other.begin(), other.end());
}
@ -1236,8 +1241,10 @@ namespace etl
{
if (this != &other)
{
this->clear();
for (typename etl::icircular_buffer<T>::iterator itr = other.begin(); itr != other.end(); ++itr)
{
{
this->push(etl::move(*itr));
}
}

View File

@ -746,13 +746,14 @@ namespace
//*************************************************************************
TEST(test_assignment)
{
Compare input1{ Ndc("0"), Ndc("1"), Ndc("2"), Ndc("3"), Ndc("4"), Ndc("5"), Ndc("6"), Ndc("7"), Ndc("8"), Ndc("9") };
Compare input2{ Ndc("9"), Ndc("8"), Ndc("7"), Ndc("6"), Ndc("5"), Ndc("4"), Ndc("3"), Ndc("2"), Ndc("1"), Ndc("0") };
Compare input1{ Ndc("0"), Ndc("1"), Ndc("2"), Ndc("3"), Ndc("4"), Ndc("5"), Ndc("6"), Ndc("7"), Ndc("8") };
Compare input2{ Ndc("8"), Ndc("7"), Ndc("6"), Ndc("5"), Ndc("4"), Ndc("3"), Ndc("2"), Ndc("1"), Ndc("0") };
Data data1;
data1.push(input1.begin(), input1.end());
// Copy construct from data1
Data data2;
data2.push(Ndc("0"));
data2 = data1;
@ -768,6 +769,32 @@ namespace
CHECK(isEqual);
}
//*************************************************************************
TEST(test_move_assignment)
{
Compare input1{ Ndc("0"), Ndc("1"), Ndc("2"), Ndc("3"), Ndc("4"), Ndc("5"), Ndc("6"), Ndc("7"), Ndc("8") };
Compare input2{ Ndc("8"), Ndc("7"), Ndc("6"), Ndc("5"), Ndc("4"), Ndc("3"), Ndc("2"), Ndc("1"), Ndc("0") };
Data data1;
data1.push(input1.begin(), input1.end());
// Copy construct from data1
Data data2;
data2.push(Ndc("0"));
data2 = etl::move(data1);
// Now change data1
data1.clear();
data1.push(input2.begin(), input2.end());
CHECK(data2.begin() != data2.end());
CHECK(data2.cbegin() != data2.cend());
CHECK_EQUAL(input1.size(), data2.size());
bool isEqual = std::equal(input1.begin(), input1.end(), data2.begin());
CHECK(isEqual);
}
//*************************************************************************
TEST(test_swap_iterator)
{

View File

@ -755,13 +755,14 @@ namespace
//*************************************************************************
TEST(test_assignment)
{
Compare input1{ Ndc("0"), Ndc("1"), Ndc("2"), Ndc("3"), Ndc("4"), Ndc("5"), Ndc("6"), Ndc("7"), Ndc("8"), Ndc("9") };
Compare input2{ Ndc("9"), Ndc("8"), Ndc("7"), Ndc("6"), Ndc("5"), Ndc("4"), Ndc("3"), Ndc("2"), Ndc("1"), Ndc("0") };
Compare input1{ Ndc("0"), Ndc("1"), Ndc("2"), Ndc("3"), Ndc("4"), Ndc("5"), Ndc("6"), Ndc("7"), Ndc("8") };
Compare input2{ Ndc("8"), Ndc("7"), Ndc("6"), Ndc("5"), Ndc("4"), Ndc("3"), Ndc("2"), Ndc("1"), Ndc("0") };
Data data1(buffer1.raw, SIZE);
data1.push(input1.begin(), input1.end());
// Copy construct from data1
Data data2(buffer2.raw, SIZE);
data2.push(Ndc("0"));
data2 = data1;
@ -777,6 +778,32 @@ namespace
CHECK(isEqual);
}
//*************************************************************************
TEST(test_move_assignment)
{
Compare input1{ Ndc("0"), Ndc("1"), Ndc("2"), Ndc("3"), Ndc("4"), Ndc("5"), Ndc("6"), Ndc("7"), Ndc("8") };
Compare input2{ Ndc("8"), Ndc("7"), Ndc("6"), Ndc("5"), Ndc("4"), Ndc("3"), Ndc("2"), Ndc("1"), Ndc("0") };
Data data1(buffer1.raw, SIZE);
data1.push(input1.begin(), input1.end());
// Copy construct from data1
Data data2(buffer2.raw, SIZE);
data2.push(Ndc("0"));
data2 = etl::move(data1);
// Now change data1
data1.clear();
data1.push(input2.begin(), input2.end());
CHECK(data2.begin() != data2.end());
CHECK(data2.cbegin() != data2.cend());
CHECK_EQUAL(input1.size(), data2.size());
bool isEqual = std::equal(input1.begin(), input1.end(), data2.begin());
CHECK(isEqual);
}
//*************************************************************************
TEST(test_swap_iterator)
{