////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2004-2011. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // // See http://www.boost.org/libs/container for documentation. // ////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include "print_container.hpp" #include "dummy_test_allocator.hpp" #include "movable_int.hpp" #include "set_test.hpp" #include "map_test.hpp" #include "emplace_test.hpp" using namespace boost::container; //Alias allocator type typedef std::allocator allocator_t; typedef std::allocator movable_allocator_t; typedef std::allocator > pair_allocator_t; typedef std::allocator > movable_pair_allocator_t; typedef std::allocator move_copy_allocator_t; typedef std::allocator > move_copy_pair_allocator_t; typedef std::allocator copy_allocator_t; typedef std::allocator > copy_pair_allocator_t; //Alias set types typedef std::set MyStdSet; typedef std::multiset MyStdMultiSet; typedef std::map MyStdMap; typedef std::multimap MyStdMultiMap; typedef flat_set, allocator_t> MyBoostSet; typedef flat_multiset, allocator_t> MyBoostMultiSet; typedef flat_map, pair_allocator_t> MyBoostMap; typedef flat_multimap, pair_allocator_t> MyBoostMultiMap; typedef flat_set ,movable_allocator_t> MyMovableBoostSet; typedef flat_multiset ,movable_allocator_t> MyMovableBoostMultiSet; typedef flat_map ,movable_pair_allocator_t> MyMovableBoostMap; typedef flat_multimap ,movable_pair_allocator_t> MyMovableBoostMultiMap; typedef flat_set ,move_copy_allocator_t> MyMoveCopyBoostSet; typedef flat_multiset ,move_copy_allocator_t> MyMoveCopyBoostMultiSet; typedef flat_map ,move_copy_pair_allocator_t> MyMoveCopyBoostMap; typedef flat_multimap ,move_copy_pair_allocator_t> MyMoveCopyBoostMultiMap; typedef flat_set ,copy_allocator_t> MyCopyBoostSet; typedef flat_multiset ,copy_allocator_t> MyCopyBoostMultiSet; typedef flat_map ,copy_pair_allocator_t> MyCopyBoostMap; typedef flat_multimap ,copy_pair_allocator_t> MyCopyBoostMultiMap; //Test recursive structures class recursive_flat_set { public: recursive_flat_set(const recursive_flat_set &c) : id_(c.id_), flat_set_(c.flat_set_) {} recursive_flat_set & operator =(const recursive_flat_set &c) { id_ = c.id_; flat_set_= c.flat_set_; return *this; } int id_; flat_set flat_set_; friend bool operator< (const recursive_flat_set &a, const recursive_flat_set &b) { return a.id_ < b.id_; } }; class recursive_flat_map { public: recursive_flat_map(const recursive_flat_map &c) : id_(c.id_), map_(c.map_) {} recursive_flat_map & operator =(const recursive_flat_map &c) { id_ = c.id_; map_= c.map_; return *this; } int id_; flat_map map_; friend bool operator< (const recursive_flat_map &a, const recursive_flat_map &b) { return a.id_ < b.id_; } }; //Test recursive structures class recursive_flat_multiset { public: recursive_flat_multiset(const recursive_flat_multiset &c) : id_(c.id_), flat_set_(c.flat_set_) {} recursive_flat_multiset & operator =(const recursive_flat_multiset &c) { id_ = c.id_; flat_set_= c.flat_set_; return *this; } int id_; flat_multiset flat_set_; friend bool operator< (const recursive_flat_multiset &a, const recursive_flat_multiset &b) { return a.id_ < b.id_; } }; class recursive_flat_multimap { public: recursive_flat_multimap(const recursive_flat_multimap &c) : id_(c.id_), map_(c.map_) {} recursive_flat_multimap & operator =(const recursive_flat_multimap &c) { id_ = c.id_; map_= c.map_; return *this; } int id_; flat_map map_; friend bool operator< (const recursive_flat_multimap &a, const recursive_flat_multimap &b) { return a.id_ < b.id_; } }; template void test_move() { //Now test move semantics C original; C move_ctor(boost::move(original)); C move_assign; move_assign = boost::move(move_ctor); move_assign.swap(original); } int main() { using namespace boost::container::test; //Now test move semantics { test_move >(); test_move >(); test_move >(); test_move >(); } if (0 != set_test< MyBoostSet ,MyStdSet ,MyBoostMultiSet ,MyStdMultiSet>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != set_test_copyable< MyBoostSet ,MyStdSet ,MyBoostMultiSet ,MyStdMultiSet>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != set_test< MyMovableBoostSet ,MyStdSet ,MyMovableBoostMultiSet ,MyStdMultiSet>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != set_test< MyMoveCopyBoostSet ,MyStdSet ,MyMoveCopyBoostMultiSet ,MyStdMultiSet>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != set_test_copyable< MyMoveCopyBoostSet ,MyStdSet ,MyMoveCopyBoostMultiSet ,MyStdMultiSet>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != set_test< MyCopyBoostSet ,MyStdSet ,MyCopyBoostMultiSet ,MyStdMultiSet>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != set_test_copyable< MyCopyBoostSet ,MyStdSet ,MyCopyBoostMultiSet ,MyStdMultiSet>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != map_test< MyBoostMap ,MyStdMap ,MyBoostMultiMap ,MyStdMultiMap>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != map_test_copyable< MyBoostMap ,MyStdMap ,MyBoostMultiMap ,MyStdMultiMap>()){ std::cout << "Error in set_test" << std::endl; return 1; } // if (0 != map_test< // MyMovableBoostMap // ,MyStdMap // ,MyMovableBoostMultiMap // ,MyStdMultiMap>()){ // return 1; // } if (0 != map_test< MyMoveCopyBoostMap ,MyStdMap ,MyMoveCopyBoostMultiMap ,MyStdMultiMap>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != map_test_copyable< MyMoveCopyBoostMap ,MyStdMap ,MyMoveCopyBoostMultiMap ,MyStdMultiMap>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != map_test< MyCopyBoostMap ,MyStdMap ,MyCopyBoostMultiMap ,MyStdMultiMap>()){ std::cout << "Error in set_test" << std::endl; return 1; } if (0 != map_test_copyable< MyCopyBoostMap ,MyStdMap ,MyCopyBoostMultiMap ,MyStdMultiMap>()){ std::cout << "Error in set_test" << std::endl; return 1; } const test::EmplaceOptions SetOptions = (test::EmplaceOptions)(test::EMPLACE_HINT | test::EMPLACE_ASSOC); const test::EmplaceOptions MapOptions = (test::EmplaceOptions)(test::EMPLACE_HINT_PAIR | test::EMPLACE_ASSOC_PAIR); // if(!boost::container::test::test_emplace, MapOptions>()) // return 1; if(!boost::container::test::test_emplace, MapOptions>()) return 1; if(!boost::container::test::test_emplace, SetOptions>()) return 1; if(!boost::container::test::test_emplace, SetOptions>()) return 1; return 0; } #include