forked from boostorg/unordered
https://svn.boost.org/svn/boost/branches/unordered/trunk ........ r42880 | danieljames | 2008-01-20 16:10:43 +0000 (Sun, 20 Jan 2008) | 17 lines Simplify the tests a little: Add a parameter to random_values to control what sort of values it generates. This means that instead of using equivalent_object to test collisions (which was a total hack) we now just need another parameter. This requires some meta programming to act differently for maps and sets. Because of this pairs no longer need to be generated so remove the code for doing that (which doesn't work on some compilers). Remove the generator object, just call generate directly. Remove some of the tests using int containers, they didn't really add to anthing other than the compile time (some tests are timing out). ........ [SVN r42882]
115 lines
3.8 KiB
C++
115 lines
3.8 KiB
C++
|
|
// Copyright 2006-2007 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 <boost/unordered_set.hpp>
|
|
#include <boost/unordered_map.hpp>
|
|
#include <boost/detail/lightweight_test.hpp>
|
|
#include "../objects/test.hpp"
|
|
#include "../helpers/random_values.hpp"
|
|
#include "../helpers/tracker.hpp"
|
|
#include "../helpers/equivalent.hpp"
|
|
|
|
#include <iostream>
|
|
|
|
test::seed_t seed(96785);
|
|
|
|
template <class T>
|
|
void assign_tests1(T*, test::random_generator generator = test::default_generator)
|
|
{
|
|
BOOST_DEDUCED_TYPENAME T::hasher hf;
|
|
BOOST_DEDUCED_TYPENAME T::key_equal eq;
|
|
|
|
std::cerr<<"assign_tests1.1\n";
|
|
{
|
|
T x;
|
|
x = x;
|
|
BOOST_TEST(x.empty());
|
|
BOOST_TEST(test::equivalent(x.hash_function(), hf));
|
|
BOOST_TEST(test::equivalent(x.key_eq(), eq));
|
|
}
|
|
|
|
std::cerr<<"assign_tests1.2\n";
|
|
{
|
|
test::random_values<T> v(1000, generator);
|
|
T x(v.begin(), v.end());
|
|
|
|
test::ordered<T> tracker = test::create_ordered(x);
|
|
tracker.insert_range(v.begin(), v.end());
|
|
|
|
x = x;
|
|
tracker.compare(x);
|
|
|
|
T y;
|
|
y.max_load_factor(x.max_load_factor() / 20);
|
|
y = x;
|
|
tracker.compare(y);
|
|
BOOST_TEST(x.max_load_factor() == y.max_load_factor());
|
|
}
|
|
}
|
|
|
|
template <class T>
|
|
void assign_tests2(T*, test::random_generator generator = test::default_generator)
|
|
{
|
|
BOOST_DEDUCED_TYPENAME T::hasher hf1(1);
|
|
BOOST_DEDUCED_TYPENAME T::hasher hf2(2);
|
|
BOOST_DEDUCED_TYPENAME T::key_equal eq1(1);
|
|
BOOST_DEDUCED_TYPENAME T::key_equal eq2(2);
|
|
BOOST_DEDUCED_TYPENAME T::allocator_type al1(1);
|
|
BOOST_DEDUCED_TYPENAME T::allocator_type al2(2);
|
|
|
|
std::cerr<<"assign_tests2.1\n";
|
|
{
|
|
test::random_values<T> v(1000, generator);
|
|
T x1(v.begin(), v.end(), 0, hf1, eq1);
|
|
T x2(0, hf2, eq2);
|
|
x2 = x1;
|
|
BOOST_TEST(test::equivalent(x2.hash_function(), hf1));
|
|
BOOST_TEST(test::equivalent(x2.key_eq(), eq1));
|
|
test::check_container(x2, v);
|
|
}
|
|
|
|
std::cerr<<"assign_tests2.2\n";
|
|
{
|
|
test::random_values<T> v1(100, generator), v2(100, generator);
|
|
T x1(v1.begin(), v1.end(), 0, hf1, eq1, al1);
|
|
T x2(v2.begin(), v2.end(), 0, hf2, eq2, al2);
|
|
x2 = x1;
|
|
BOOST_TEST(test::equivalent(x2.hash_function(), hf1));
|
|
BOOST_TEST(test::equivalent(x2.key_eq(), eq1));
|
|
BOOST_TEST(test::equivalent(x2.get_allocator(), al2));
|
|
test::check_container(x2, v1);
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
|
|
boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
|
|
boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
|
|
boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
|
|
|
|
assign_tests1(test_set);
|
|
assign_tests1(test_multiset);
|
|
assign_tests1(test_map);
|
|
assign_tests1(test_multimap);
|
|
|
|
assign_tests1(test_set, test::generate_collisions);
|
|
assign_tests1(test_multiset, test::generate_collisions);
|
|
assign_tests1(test_map, test::generate_collisions);
|
|
assign_tests1(test_multimap, test::generate_collisions);
|
|
|
|
assign_tests2(test_set);
|
|
assign_tests2(test_multiset);
|
|
assign_tests2(test_map);
|
|
assign_tests2(test_multimap);
|
|
|
|
assign_tests2(test_set, test::generate_collisions);
|
|
assign_tests2(test_multiset, test::generate_collisions);
|
|
assign_tests2(test_map, test::generate_collisions);
|
|
assign_tests2(test_multimap, test::generate_collisions);
|
|
|
|
return boost::report_errors();
|
|
}
|