summaryrefslogtreecommitdiff
path: root/libs/container/test/list_test.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/container/test/list_test.hpp')
-rw-r--r--libs/container/test/list_test.hpp134
1 files changed, 127 insertions, 7 deletions
diff --git a/libs/container/test/list_test.hpp b/libs/container/test/list_test.hpp
index 9aae06d9f..aec82c6f3 100644
--- a/libs/container/test/list_test.hpp
+++ b/libs/container/test/list_test.hpp
@@ -12,18 +12,17 @@
#define BOOST_CONTAINER_TEST_LIST_TEST_HEADER
#include <boost/container/detail/config_begin.hpp>
+#include <boost/container/detail/iterator.hpp>
#include "check_equal_containers.hpp"
-#include <memory>
-#include <list>
-#include <vector>
-#include <functional>
#include "print_container.hpp"
#include "input_from_forward_iterator.hpp"
#include <boost/move/utility_core.hpp>
#include <boost/move/iterator.hpp>
-#include <string>
#include <boost/move/make_unique.hpp>
+#include <list>
+#include <functional> //std::greater
+
namespace boost{
namespace container {
namespace test{
@@ -71,6 +70,32 @@ bool list_copyable_only(V1 &boostlist, V2 &stdlist, boost::container::container_
stdlist.push_front(int(3));
if(!test::CheckEqualContainers(boostlist, stdlist)) return false;
}
+ { //List(const List &)
+ ::boost::movelib::unique_ptr<V1> const pv1 = ::boost::movelib::make_unique<V1>(boostlist);
+ ::boost::movelib::unique_ptr<V2> const pv2 = ::boost::movelib::make_unique<V2>(stdlist);
+
+ V1 &v1 = *pv1;
+ V2 &v2 = *pv2;
+
+ boostlist.clear();
+ stdlist.clear();
+ boostlist.assign(v1.begin(), v1.end());
+ stdlist.assign(v2.begin(), v2.end());
+ if(!test::CheckEqualContainers(boostlist, stdlist)) return 1;
+ }
+ { //List(const List &, alloc)
+ ::boost::movelib::unique_ptr<V1> const pv1 = ::boost::movelib::make_unique<V1>(boostlist, typename V1::allocator_type());
+ ::boost::movelib::unique_ptr<V2> const pv2 = ::boost::movelib::make_unique<V2>(stdlist);
+
+ V1 &v1 = *pv1;
+ V2 &v2 = *pv2;
+
+ boostlist.clear();
+ stdlist.clear();
+ boostlist.assign(v1.begin(), v1.end());
+ stdlist.assign(v2.begin(), v2.end());
+ if(!test::CheckEqualContainers(boostlist, stdlist)) return 1;
+ }
return true;
}
@@ -149,6 +174,37 @@ int list_test (bool copied_allocators_equal = true)
const int max = 100;
typedef list_push_data_function<DoublyLinked> push_data_t;
+ { //List(n)
+ ::boost::movelib::unique_ptr<MyBoostList> const pboostlist = ::boost::movelib::make_unique<MyBoostList>(100);
+ ::boost::movelib::unique_ptr<MyStdList> const pstdlist = ::boost::movelib::make_unique<MyStdList>(100);
+ if(!test::CheckEqualContainers(*pboostlist, *pstdlist)) return 1;
+ }
+ { //List(n, alloc)
+ ::boost::movelib::unique_ptr<MyBoostList> const pboostlist = ::boost::movelib::make_unique<MyBoostList>(100, typename MyBoostList::allocator_type());
+ ::boost::movelib::unique_ptr<MyStdList> const pstdlist = ::boost::movelib::make_unique<MyStdList>(100);
+ if(!test::CheckEqualContainers(*pboostlist, *pstdlist)) return 1;
+ }
+ { //List(List &&)
+ ::boost::movelib::unique_ptr<MyStdList> const stdlistp = ::boost::movelib::make_unique<MyStdList>(100);
+ ::boost::movelib::unique_ptr<MyBoostList> const boostlistp = ::boost::movelib::make_unique<MyBoostList>(100);
+ ::boost::movelib::unique_ptr<MyBoostList> const boostlistp2 = ::boost::movelib::make_unique<MyBoostList>(::boost::move(*boostlistp));
+ if(!test::CheckEqualContainers(*boostlistp2, *stdlistp)) return 1;
+ }
+ { //List(List &&, alloc)
+ ::boost::movelib::unique_ptr<MyStdList> const stdlistp = ::boost::movelib::make_unique<MyStdList>(100);
+ ::boost::movelib::unique_ptr<MyBoostList> const boostlistp = ::boost::movelib::make_unique<MyBoostList>(100);
+ ::boost::movelib::unique_ptr<MyBoostList> const boostlistp2 = ::boost::movelib::make_unique<MyBoostList>
+ (::boost::move(*boostlistp), typename MyBoostList::allocator_type());
+ if(!test::CheckEqualContainers(*boostlistp2, *stdlistp)) return 1;
+ }
+ { //List operator=(List &&)
+ ::boost::movelib::unique_ptr<MyStdList> const stdlistp = ::boost::movelib::make_unique<MyStdList>(100);
+ ::boost::movelib::unique_ptr<MyBoostList> const boostlistp = ::boost::movelib::make_unique<MyBoostList>(100);
+ ::boost::movelib::unique_ptr<MyBoostList> const boostlistp2 = ::boost::movelib::make_unique<MyBoostList>();
+ *boostlistp2 = ::boost::move(*boostlistp);
+ if(!test::CheckEqualContainers(*boostlistp2, *stdlistp)) return 1;
+ }
+
::boost::movelib::unique_ptr<MyBoostList> const pboostlist = ::boost::movelib::make_unique<MyBoostList>();
::boost::movelib::unique_ptr<MyStdList> const pstdlist = ::boost::movelib::make_unique<MyStdList>();
@@ -229,7 +285,7 @@ int list_test (bool copied_allocators_equal = true)
boostlist.insert(boostlist.begin()
,boost::make_move_iterator(&aux_vect[0])
,boost::make_move_iterator(&aux_vect[50]));
- if(it_insert != boostlist.begin() || std::distance(it_insert, old_begin) != 50)
+ if(it_insert != boostlist.begin() || boost::container::iterator_distance(it_insert, old_begin) != 50)
return 1;
stdlist.insert(stdlist.begin(), &aux_vect2[0], &aux_vect2[50]);
@@ -249,7 +305,7 @@ int list_test (bool copied_allocators_equal = true)
it_insert = boostlist.insert(boostlist.end()
,boost::make_move_iterator(make_input_from_forward_iterator(&aux_vect[0]))
,boost::make_move_iterator(make_input_from_forward_iterator(&aux_vect[50])));
- if(std::distance(it_insert, boostlist.end()) != 50)
+ if(boost::container::iterator_distance(it_insert, boostlist.end()) != 50)
return 1;
stdlist.insert(stdlist.end(), &aux_vect2[0], &aux_vect2[50]);
if(!CheckEqualContainers(boostlist, stdlist))
@@ -285,6 +341,20 @@ int list_test (bool copied_allocators_equal = true)
if(!CheckEqualContainers(boostlist, stdlist))
return 1;
+ //some comparison operators
+ if(!(boostlist == boostlist))
+ return 1;
+ if(boostlist != boostlist)
+ return 1;
+ if(boostlist < boostlist)
+ return 1;
+ if(boostlist > boostlist)
+ return 1;
+ if(!(boostlist <= boostlist))
+ return 1;
+ if(!(boostlist >= boostlist))
+ return 1;
+
if(push_data_t::execute(max, boostlist, stdlist)){
return 1;
}
@@ -340,6 +410,56 @@ int list_test (bool copied_allocators_equal = true)
return 0;
}
+template<class List>
+bool test_list_methods_with_initializer_list_as_argument_for()
+{
+#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
+ const std::initializer_list<int> il = {5, 10, 15};
+ const List expected_list(il.begin(), il.end());
+ {
+ List sl = il;
+ if(sl != expected_list)
+ return false;
+ }
+
+ {
+ List sl = {1, 2};
+ sl = il;
+ if(sl != expected_list)
+ return false;
+ }
+ {
+ List sl({ 1, 2 }, typename List::allocator_type());
+ sl = il;
+ if (sl != expected_list)
+ return false;
+ }
+ {
+ List sl = {4, 5};
+ sl.assign(il);
+ if(sl != expected_list)
+ return false;
+ }
+
+ {
+ List sl = {15};
+ sl.insert(sl.cbegin(), {5, 10});
+ if(sl != expected_list)
+ return false;
+ }
+
+ {
+ List sl = {5};
+ sl.insert_after(sl.cbegin(), {10, 15});
+ if(sl != expected_list)
+ return false;
+ }
+ return true;
+#endif
+ return true;
+}
+
+
} //namespace test{
} //namespace container {
} //namespace boost{