// Copyright 2006-2008 Daniel James. // 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) // This test checks the runtime requirements of containers. #include #include #include "../helpers/test.hpp" #include #include #include "../helpers/equivalent.hpp" template void simple_test(X const& a) { test::unordered_equivalence_tester equivalent(a); { X u; BOOST_TEST(u.size() == 0); BOOST_TEST(X().size() == 0); } { BOOST_TEST(equivalent(X(a))); } { X u(a); BOOST_TEST(equivalent(u)); } { X u = a; BOOST_TEST(equivalent(u)); } { X b(a); BOOST_TEST(b.begin() == const_cast(b).cbegin()); BOOST_TEST(b.end() == const_cast(b).cend()); } { X b(a); X c; BOOST_TEST(equivalent(b)); BOOST_TEST(c.empty()); b.swap(c); BOOST_TEST(b.empty()); BOOST_TEST(equivalent(c)); b.swap(c); BOOST_TEST(c.empty()); BOOST_TEST(equivalent(b)); } { X u; X& r = u; BOOST_TEST(&(r = r) == &r); BOOST_TEST(r.empty()); BOOST_TEST(&(r = a) == &r); BOOST_TEST(equivalent(r)); BOOST_TEST(&(r = r) == &r); BOOST_TEST(equivalent(r)); } { BOOST_TEST(a.size() == (BOOST_DEDUCED_TYPENAME X::size_type) std::distance(a.begin(), a.end())); } { BOOST_TEST(a.empty() == (a.size() == 0)); } { BOOST_TEST(a.empty() == (a.begin() == a.end())); X u; BOOST_TEST(u.begin() == u.end()); } } UNORDERED_AUTO_TEST(simple_tests) { using namespace std; srand(14878); std::cout<<"Test unordered_set.\n"; boost::unordered_set set; simple_test(set); set.insert(1); set.insert(2); set.insert(1456); simple_test(set); std::cout<<"Test unordered_multiset.\n"; boost::unordered_multiset multiset; simple_test(multiset); for(int i1 = 0; i1 < 1000; ++i1) { int count = rand() % 10, index = rand(); for(int j = 0; j < count; ++j) multiset.insert(index); } simple_test(multiset); std::cout<<"Test unordered_map.\n"; boost::unordered_map map; for(int i2 = 0; i2 < 1000; ++i2) { map.insert(std::pair(rand(), rand())); } simple_test(map); std::cout<<"Test unordered_multimap.\n"; boost::unordered_multimap multimap; for(int i3 = 0; i3 < 1000; ++i3) { int count = rand() % 10, index = rand(); for(int j = 0; j < count; ++j) multimap.insert(std::pair(index, rand())); } simple_test(multimap); } RUN_TESTS()