// (C) Copyright John Maddock 2008. // Use, modification and distribution are subject to 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 "boost/concept_check.hpp" #include "boost/concept_archetype.hpp" #include "verify_return.hpp" namespace boost{ template class default_constructible_unary_function_archetype { public: const Return& operator()(const Arg&) const { return static_object::get(); } }; template > class default_constructible_binary_predicate_archetype { typedef boolean_archetype Return; public: const Return& operator()(const Arg1&, const Arg2&) const { return static_object::get(); } }; template struct UnorderedContainer { void constraints() { function_requires >(); typedef typename Unordered::key_type key_type; typedef typename Unordered::hasher hasher; typedef typename Unordered::key_equal key_equal; typedef typename Unordered::local_iterator local_iterator; typedef typename Unordered::const_local_iterator const_local_iterator; typedef typename Unordered::value_type value_type; typedef typename Unordered::iterator iterator; typedef typename Unordered::const_iterator const_iterator; typedef typename Unordered::size_type size_type; function_requires >(); function_requires >(); function_requires >(); function_requires >(); function_requires >(); function_requires >(); size_type n = 1; const hasher& hf = static_object::get(); const key_equal& eq = static_object::get(); value_type const& t = static_object::get(); key_type const& k = static_object::get(); Unordered x1(n, hf, eq); Unordered x2(n, hf); Unordered x3(n); Unordered x4; typedef input_iterator_archetype input_iterator; input_iterator i = static_object::get(); input_iterator j = i; x1 = Unordered(i, j, n, hf, eq); x2 = Unordered(i, j, n, hf); x3 = Unordered(i, j, n); x4 = Unordered(i, j); x1 = x2; Unordered x5(x1); iterator q = x1.begin(); const_iterator r = x1.begin(); verify_return_type(x1.hash_function(), hf); verify_return_type(x1.key_eq(), eq); verify_return_type(x1.insert(q, t), q); x1.insert(i, j); verify_return_type(x1.erase(k), n); verify_return_type(x1.erase(q), q); verify_return_type(x1.erase(q, q), q); x1.clear(); const Unordered& b = x1; verify_return_type(x1.find(k), q); verify_return_type(b.find(k), r); verify_return_type(b.count(k), n); verify_return_type(x1.equal_range(k), std::make_pair(q, q)); verify_return_type(b.equal_range(k), std::make_pair(r, r)); verify_return_type(b.bucket_count(), n); verify_return_type(b.max_bucket_count(), n); verify_return_type(b.bucket(k), n); verify_return_type(b.bucket_size(n), n); local_iterator li = x1.begin(n); const_local_iterator cli = b.begin(n); verify_return_type(x1.begin(n), li); verify_return_type(b.begin(n), cli); verify_return_type(x1.end(n), li); verify_return_type(b.end(n), cli); verify_return_type(b.load_factor(), 1.0f); verify_return_type(b.max_load_factor(), 1.0f); x1.max_load_factor(1.0f); x1.rehash(n); } }; template struct UniqueUnorderedContainer { void constraints() { typedef typename Unordered::key_type key_type; typedef typename Unordered::hasher hasher; typedef typename Unordered::key_equal key_equal; typedef typename Unordered::local_iterator local_iterator; typedef typename Unordered::const_local_iterator const_local_iterator; typedef typename Unordered::value_type value_type; Unordered x; value_type const& t = static_object::get(); function_requires >(); verify_return_type(x.insert(t), static_object >::get()); } }; template struct MultiUnorderedContainer { void constraints() { typedef typename Unordered::key_type key_type; typedef typename Unordered::hasher hasher; typedef typename Unordered::key_equal key_equal; typedef typename Unordered::local_iterator local_iterator; typedef typename Unordered::const_local_iterator const_local_iterator; typedef typename Unordered::value_type value_type; Unordered x; value_type const& t = static_object::get(); function_requires >(); verify_return_type(x.insert(t), static_object::get()); } }; }