| |
| // Copyright 2006-2009 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) |
| |
| #include "../helpers/prefix.hpp" |
| |
| #include "./containers.hpp" |
| #include "../helpers/random_values.hpp" |
| #include "../helpers/invariants.hpp" |
| #include "../helpers/helpers.hpp" |
| |
| test::seed_t seed(835193); |
| |
| template <class T> |
| struct erase_test_base : public test::exception_base |
| { |
| test::random_values<T> values; |
| erase_test_base(unsigned int count = 5) : values(count) {} |
| |
| typedef T data_type; |
| |
| data_type init() const { |
| return T(values.begin(), values.end()); |
| } |
| |
| void check BOOST_PREVENT_MACRO_SUBSTITUTION(T const& x) const { |
| std::string scope(test::scope); |
| |
| BOOST_TEST(scope.find("hash::") != std::string::npos || |
| scope.find("equal_to::") != std::string::npos || |
| scope == "operator==(object, object)"); |
| |
| test::check_equivalent_keys(x); |
| } |
| }; |
| |
| template <class T> |
| struct erase_by_key_test1 : public erase_test_base<T> |
| { |
| void run(T& x) const |
| { |
| typedef BOOST_DEDUCED_TYPENAME |
| test::random_values<T>::const_iterator iterator; |
| |
| for(iterator it = this->values.begin(), end = this->values.end(); |
| it != end; ++it) |
| { |
| x.erase(test::get_key<T>(*it)); |
| } |
| } |
| }; |
| |
| RUN_EXCEPTION_TESTS( |
| (erase_by_key_test1), |
| CONTAINER_SEQ) |