Fixes #152 ("Tree-based containers have troubles with move-only types")

This commit is contained in:
Ion Gaztañaga
2020-10-31 23:09:52 +01:00
parent 38ea1d7294
commit d4c8bd70ea
4 changed files with 95 additions and 40 deletions
+42 -15
View File
@@ -401,21 +401,48 @@ int map_test_insert(MyBoostMap &boostmap, MyStdMap &stdmap, MyBoostMultiMap &boo
if(!CheckEqualPairContainers(boostmap, stdmap)) return 1;
if(!CheckEqualPairContainers(boostmultimap, stdmultimap)) return 1;
//Swapping test
MyBoostMap tmpboostemap2;
MyStdMap tmpstdmap2;
MyBoostMultiMap tmpboostemultimap2;
MyStdMultiMap tmpstdmultimap2;
boostmap.swap(tmpboostemap2);
stdmap.swap(tmpstdmap2);
boostmultimap.swap(tmpboostemultimap2);
stdmultimap.swap(tmpstdmultimap2);
boostmap.swap(tmpboostemap2);
stdmap.swap(tmpstdmap2);
boostmultimap.swap(tmpboostemultimap2);
stdmultimap.swap(tmpstdmultimap2);
if(!CheckEqualPairContainers(boostmap, stdmap)) return 1;
if(!CheckEqualPairContainers(boostmultimap, stdmultimap)) return 1;
{
//Swapping test
MyBoostMap tmpboostemap2;
MyStdMap tmpstdmap2;
MyBoostMultiMap tmpboostemultimap2;
MyStdMultiMap tmpstdmultimap2;
boostmap.swap(tmpboostemap2);
stdmap.swap(tmpstdmap2);
boostmultimap.swap(tmpboostemultimap2);
stdmultimap.swap(tmpstdmultimap2);
boostmap.swap(tmpboostemap2);
stdmap.swap(tmpstdmap2);
boostmultimap.swap(tmpboostemultimap2);
stdmultimap.swap(tmpstdmultimap2);
if(!CheckEqualPairContainers(boostmap, stdmap)) return 1;
if(!CheckEqualPairContainers(boostmultimap, stdmultimap)) return 1;
}
//move constructor/assignment
{
MyBoostMap tmpboostemap2(boost::move(boostmap));
if(!CheckEqualContainers(tmpboostemap2, stdmap)){
std::cout << "Error in boostmap move constructor" << std::endl;
return 1;
}
MyBoostMultiMap tmpboostemultimap2(boost::move(boostmultimap));
if(!CheckEqualContainers(tmpboostemultimap2, stdmultimap)){
std::cout << "Error in boostmultimap move constructor" << std::endl;
return 1;
}
boostmap = boost::move(tmpboostemap2);
if(!CheckEqualContainers(boostmap, stdmap)){
std::cout << "Error in boostmap move assignment" << std::endl;
return 1;
}
boostmultimap = boost::move(tmpboostemultimap2);
if(!CheckEqualContainers(boostmultimap, stdmultimap)){
std::cout << "Error in boostmultimap move assignment" << std::endl;
return 1;
}
}
}
return 0;
}
+47 -21
View File
@@ -112,7 +112,7 @@ int set_test_copyable(boost::container::dtl::true_type)
return 1;
}
{
//Now, test copy constructor
//Now, test copy constructor with allocator
MyBoostSet boostsetcopy(boostset, typename MyBoostSet::allocator_type());
MyStdSet stdsetcopy(stdset);
@@ -347,28 +347,54 @@ int set_test ()
return 1;
}
//Swapping test
MyBoostSet tmpboosteset2;
MyStdSet tmpstdset2;
MyBoostMultiSet tmpboostemultiset2;
MyStdMultiSet tmpstdmultiset2;
boostset.swap(tmpboosteset2);
stdset.swap(tmpstdset2);
boostmultiset.swap(tmpboostemultiset2);
stdmultiset.swap(tmpstdmultiset2);
boostset.swap(tmpboosteset2);
stdset.swap(tmpstdset2);
boostmultiset.swap(tmpboostemultiset2);
stdmultiset.swap(tmpstdmultiset2);
if(!CheckEqualContainers(boostset, stdset)){
std::cout << "Error in boostset.swap(tmpboosteset2)" << std::endl;
return 1;
}
if(!CheckEqualContainers(boostmultiset, stdmultiset)){
std::cout << "Error in boostmultiset.swap(tmpboostemultiset2)" << std::endl;
return 1;
{
//Swapping test
MyBoostSet tmpboosteset2;
MyStdSet tmpstdset2;
MyBoostMultiSet tmpboostemultiset2;
MyStdMultiSet tmpstdmultiset2;
boostset.swap(tmpboosteset2);
stdset.swap(tmpstdset2);
boostmultiset.swap(tmpboostemultiset2);
stdmultiset.swap(tmpstdmultiset2);
boostset.swap(tmpboosteset2);
stdset.swap(tmpstdset2);
boostmultiset.swap(tmpboostemultiset2);
stdmultiset.swap(tmpstdmultiset2);
if(!CheckEqualContainers(boostset, stdset)){
std::cout << "Error in boostset.swap(tmpboosteset2)" << std::endl;
return 1;
}
if(!CheckEqualContainers(boostmultiset, stdmultiset)){
std::cout << "Error in boostmultiset.swap(tmpboostemultiset2)" << std::endl;
return 1;
}
}
//move constructor/assignment
{
MyBoostSet tmpboosteset2(boost::move(boostset));
if(!CheckEqualContainers(tmpboosteset2, stdset)){
std::cout << "Error in boostset move constructor " << std::endl;
return 1;
}
MyBoostMultiSet tmpboostemultiset2(boost::move(boostmultiset));
if(!CheckEqualContainers(tmpboostemultiset2, stdmultiset)){
std::cout << "Error in boostmultiset move constructor" << std::endl;
return 1;
}
boostset = boost::move(tmpboosteset2);
if(!CheckEqualContainers(boostset, stdset)){
std::cout << "Error in boostset move assignment" << std::endl;
return 1;
}
boostmultiset = boost::move(tmpboostemultiset2);
if(!CheckEqualContainers(boostmultiset, stdmultiset)){
std::cout << "Error in boostmultiset move assignment" << std::endl;
return 1;
}
}
//Insertion from other container
//Initialize values
{