2006-05-17 17:19:16 +00:00
|
|
|
|
2010-10-21 20:23:37 +00:00
|
|
|
// Copyright 2006-2010 Daniel James.
|
2006-07-01 22:31:26 +00:00
|
|
|
// 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)
|
2006-05-17 17:19:16 +00:00
|
|
|
|
2009-11-26 23:15:30 +00:00
|
|
|
#include "../helpers/prefix.hpp"
|
2006-05-17 17:19:16 +00:00
|
|
|
#include <boost/unordered_set.hpp>
|
|
|
|
#include <boost/unordered_map.hpp>
|
2012-04-08 15:29:15 +00:00
|
|
|
#include "../helpers/postfix.hpp"
|
|
|
|
|
2008-03-24 17:03:15 +00:00
|
|
|
#include "../helpers/test.hpp"
|
2006-05-17 17:19:16 +00:00
|
|
|
#include <boost/next_prior.hpp>
|
|
|
|
#include "../objects/test.hpp"
|
|
|
|
#include "../helpers/random_values.hpp"
|
|
|
|
#include "../helpers/tracker.hpp"
|
|
|
|
#include "../helpers/equivalent.hpp"
|
|
|
|
#include "../helpers/invariants.hpp"
|
2006-08-06 20:42:45 +00:00
|
|
|
#include "../helpers/input_iterator.hpp"
|
2006-05-17 17:19:16 +00:00
|
|
|
|
|
|
|
#include <iostream>
|
2008-04-17 07:39:24 +00:00
|
|
|
|
|
|
|
namespace insert_tests {
|
2006-05-17 17:19:16 +00:00
|
|
|
|
2007-12-06 11:42:28 +00:00
|
|
|
test::seed_t seed(243432);
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
template <class X>
|
2010-01-04 22:49:39 +00:00
|
|
|
void unique_insert_tests1(X*,
|
|
|
|
test::random_generator generator = test::default_generator)
|
2006-05-17 17:19:16 +00:00
|
|
|
{
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2008-01-10 22:30:46 +00:00
|
|
|
typedef BOOST_DEDUCED_TYPENAME X::iterator iterator;
|
2006-06-12 23:30:46 +00:00
|
|
|
typedef test::ordered<X> ordered;
|
|
|
|
|
2006-05-17 17:19:16 +00:00
|
|
|
std::cerr<<"insert(value) tests for containers with unique keys.\n";
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
X x;
|
|
|
|
test::ordered<X> tracker = test::create_ordered(x);
|
2006-05-17 17:19:16 +00:00
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
2008-01-10 22:30:46 +00:00
|
|
|
|
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator it = v.begin();
|
2006-05-17 17:19:16 +00:00
|
|
|
it != v.end(); ++it)
|
|
|
|
{
|
2008-01-10 22:30:46 +00:00
|
|
|
|
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type old_bucket_count = x.bucket_count();
|
2006-05-21 17:14:11 +00:00
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
2006-06-12 23:30:46 +00:00
|
|
|
std::pair<iterator, bool> r1 = x.insert(*it);
|
2010-01-04 22:49:39 +00:00
|
|
|
std::pair<BOOST_DEDUCED_TYPENAME ordered::iterator, bool>
|
|
|
|
r2 = tracker.insert(*it);
|
2006-05-17 17:19:16 +00:00
|
|
|
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(r1.second == r2.second);
|
|
|
|
BOOST_TEST(*r1.first == *r2.first);
|
2006-05-17 17:19:16 +00:00
|
|
|
|
|
|
|
tracker.compare_key(x, *it);
|
2006-05-21 17:14:11 +00:00
|
|
|
|
2010-12-11 14:43:00 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
2006-05-17 17:19:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
template <class X>
|
2010-01-04 22:49:39 +00:00
|
|
|
void equivalent_insert_tests1(X*,
|
|
|
|
test::random_generator generator = test::default_generator)
|
2006-05-17 17:19:16 +00:00
|
|
|
{
|
|
|
|
std::cerr<<"insert(value) tests for containers with equivalent keys.\n";
|
|
|
|
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
X x;
|
|
|
|
test::ordered<X> tracker = test::create_ordered(x);
|
2006-05-17 17:19:16 +00:00
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
2008-01-10 22:30:46 +00:00
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator it = v.begin();
|
2006-05-17 17:19:16 +00:00
|
|
|
it != v.end(); ++it)
|
|
|
|
{
|
2008-01-10 22:30:46 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type old_bucket_count = x.bucket_count();
|
2006-05-21 17:14:11 +00:00
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
2008-01-10 22:30:46 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME X::iterator r1 = x.insert(*it);
|
2010-01-04 22:49:39 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME test::ordered<X>::iterator r2
|
|
|
|
= tracker.insert(*it);
|
2006-05-17 17:19:16 +00:00
|
|
|
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(*r1 == *r2);
|
2006-05-17 17:19:16 +00:00
|
|
|
|
|
|
|
tracker.compare_key(x, *it);
|
2006-05-21 17:14:11 +00:00
|
|
|
|
2010-12-11 14:43:00 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
2006-05-17 17:19:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
template <class X>
|
2010-01-04 22:49:39 +00:00
|
|
|
void insert_tests2(X*,
|
|
|
|
test::random_generator generator = test::default_generator)
|
2006-05-17 17:19:16 +00:00
|
|
|
{
|
2008-01-10 22:30:46 +00:00
|
|
|
typedef BOOST_DEDUCED_TYPENAME test::ordered<X> tracker_type;
|
|
|
|
typedef BOOST_DEDUCED_TYPENAME X::iterator iterator;
|
|
|
|
typedef BOOST_DEDUCED_TYPENAME X::const_iterator const_iterator;
|
|
|
|
typedef BOOST_DEDUCED_TYPENAME tracker_type::iterator tracker_iterator;
|
2006-05-17 17:19:16 +00:00
|
|
|
|
|
|
|
std::cerr<<"insert(begin(), value) tests.\n";
|
|
|
|
|
|
|
|
{
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
X x;
|
2006-05-17 17:19:16 +00:00
|
|
|
tracker_type tracker = test::create_ordered(x);
|
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
2010-01-04 22:49:39 +00:00
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator
|
|
|
|
it = v.begin(); it != v.end(); ++it)
|
2006-05-17 17:19:16 +00:00
|
|
|
{
|
2010-01-04 22:49:39 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type
|
|
|
|
old_bucket_count = x.bucket_count();
|
2006-05-21 17:14:11 +00:00
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
2006-05-17 17:19:16 +00:00
|
|
|
iterator r1 = x.insert(x.begin(), *it);
|
|
|
|
tracker_iterator r2 = tracker.insert(tracker.begin(), *it);
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(*r1 == *r2);
|
2006-05-17 17:19:16 +00:00
|
|
|
tracker.compare_key(x, *it);
|
2006-05-21 17:14:11 +00:00
|
|
|
|
2010-12-11 14:43:00 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
2006-05-17 17:19:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::cerr<<"insert(end(), value) tests.\n";
|
|
|
|
|
|
|
|
{
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
X x;
|
|
|
|
X const& x_const = x;
|
2006-05-17 17:19:16 +00:00
|
|
|
tracker_type tracker = test::create_ordered(x);
|
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(100, generator);
|
2010-01-04 22:49:39 +00:00
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator
|
|
|
|
it = v.begin(); it != v.end(); ++it)
|
2006-05-17 17:19:16 +00:00
|
|
|
{
|
2010-01-04 22:49:39 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type
|
|
|
|
old_bucket_count = x.bucket_count();
|
2006-05-21 17:14:11 +00:00
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
2006-05-17 17:19:16 +00:00
|
|
|
const_iterator r1 = x.insert(x_const.end(), *it);
|
|
|
|
tracker_iterator r2 = tracker.insert(tracker.end(), *it);
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(*r1 == *r2);
|
2006-05-17 17:19:16 +00:00
|
|
|
tracker.compare_key(x, *it);
|
2006-05-21 17:14:11 +00:00
|
|
|
|
2010-12-11 14:43:00 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
2006-05-17 17:19:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::cerr<<"insert(pos, value) tests.\n";
|
|
|
|
|
|
|
|
{
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
X x;
|
2006-05-17 17:19:16 +00:00
|
|
|
const_iterator pos = x.begin();
|
|
|
|
tracker_type tracker = test::create_ordered(x);
|
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
2010-01-04 22:49:39 +00:00
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator
|
|
|
|
it = v.begin(); it != v.end(); ++it)
|
2006-05-17 17:19:16 +00:00
|
|
|
{
|
2010-01-04 22:49:39 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type
|
|
|
|
old_bucket_count = x.bucket_count();
|
2006-05-21 17:14:11 +00:00
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
2006-05-17 17:19:16 +00:00
|
|
|
pos = x.insert(pos, *it);
|
|
|
|
tracker_iterator r2 = tracker.insert(tracker.begin(), *it);
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(*pos == *r2);
|
2006-05-17 17:19:16 +00:00
|
|
|
tracker.compare_key(x, *it);
|
2006-05-21 17:14:11 +00:00
|
|
|
|
2011-01-03 12:43:34 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
2006-05-17 17:19:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::cerr<<"insert single item range tests.\n";
|
|
|
|
|
|
|
|
{
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
X x;
|
2006-05-17 17:19:16 +00:00
|
|
|
tracker_type tracker = test::create_ordered(x);
|
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
2010-01-04 22:49:39 +00:00
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator
|
|
|
|
it = v.begin(); it != v.end(); ++it)
|
2006-05-17 17:19:16 +00:00
|
|
|
{
|
2010-01-04 22:49:39 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type
|
|
|
|
old_bucket_count = x.bucket_count();
|
2006-05-21 17:14:11 +00:00
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
2006-05-17 17:19:16 +00:00
|
|
|
x.insert(it, boost::next(it));
|
|
|
|
tracker.insert(*it);
|
|
|
|
tracker.compare_key(x, *it);
|
2006-05-21 17:14:11 +00:00
|
|
|
|
2011-01-03 12:43:34 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
2006-05-17 17:19:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
|
|
|
std::cerr<<"insert range tests.\n";
|
|
|
|
|
|
|
|
{
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
X x;
|
2006-05-17 17:19:16 +00:00
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
2006-05-17 17:19:16 +00:00
|
|
|
x.insert(v.begin(), v.end());
|
|
|
|
|
2006-10-31 22:19:26 +00:00
|
|
|
test::check_container(x, v);
|
2006-05-17 17:19:16 +00:00
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
2006-08-06 20:42:45 +00:00
|
|
|
|
|
|
|
std::cerr<<"insert input iterator range tests.\n";
|
|
|
|
|
|
|
|
{
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2006-08-06 20:42:45 +00:00
|
|
|
X x;
|
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
2009-12-04 19:44:34 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME test::random_values<X>::const_iterator
|
|
|
|
begin = v.begin(), end = v.end();
|
|
|
|
x.insert(test::input_iterator(begin), test::input_iterator(end));
|
2006-08-06 20:42:45 +00:00
|
|
|
test::check_container(x, v);
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
2010-10-21 20:23:37 +00:00
|
|
|
|
|
|
|
std::cerr<<"insert copy iterator range tests.\n";
|
|
|
|
|
|
|
|
{
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2010-10-21 20:23:37 +00:00
|
|
|
X x;
|
|
|
|
|
|
|
|
test::random_values<X> v(1000, generator);
|
|
|
|
x.insert(test::copy_iterator(v.begin()), test::copy_iterator(v.end()));
|
|
|
|
test::check_container(x, v);
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
2006-05-17 17:19:16 +00:00
|
|
|
}
|
|
|
|
|
2010-02-16 22:33:10 +00:00
|
|
|
#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
|
|
|
|
template <class X>
|
2010-01-04 22:49:39 +00:00
|
|
|
void unique_emplace_tests1(X*,
|
|
|
|
test::random_generator generator = test::default_generator)
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
{
|
|
|
|
typedef BOOST_DEDUCED_TYPENAME X::iterator iterator;
|
|
|
|
typedef test::ordered<X> ordered;
|
|
|
|
|
|
|
|
std::cerr<<"emplace(value) tests for containers with unique keys.\n";
|
|
|
|
|
|
|
|
X x;
|
|
|
|
test::ordered<X> tracker = test::create_ordered(x);
|
|
|
|
|
|
|
|
test::random_values<X> v(1000, generator);
|
|
|
|
|
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator it = v.begin();
|
|
|
|
it != v.end(); ++it)
|
|
|
|
{
|
|
|
|
|
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type old_bucket_count = x.bucket_count();
|
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
|
|
|
std::pair<iterator, bool> r1 = x.emplace(*it);
|
2010-01-04 22:49:39 +00:00
|
|
|
std::pair<BOOST_DEDUCED_TYPENAME ordered::iterator, bool>
|
|
|
|
r2 = tracker.insert(*it);
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(r1.second == r2.second);
|
|
|
|
BOOST_TEST(*r1.first == *r2.first);
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
|
|
|
|
tracker.compare_key(x, *it);
|
|
|
|
|
2010-12-11 14:43:00 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class X>
|
2010-01-04 22:49:39 +00:00
|
|
|
void equivalent_emplace_tests1(X*,
|
|
|
|
test::random_generator generator = test::default_generator)
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
{
|
|
|
|
std::cerr<<"emplace(value) tests for containers with equivalent keys.\n";
|
|
|
|
|
|
|
|
X x;
|
|
|
|
test::ordered<X> tracker = test::create_ordered(x);
|
|
|
|
|
|
|
|
test::random_values<X> v(1000, generator);
|
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator it = v.begin();
|
|
|
|
it != v.end(); ++it)
|
|
|
|
{
|
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type old_bucket_count = x.bucket_count();
|
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
|
|
|
BOOST_DEDUCED_TYPENAME X::iterator r1 = x.emplace(*it);
|
2010-01-04 22:49:39 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME test::ordered<X>::iterator
|
|
|
|
r2 = tracker.insert(*it);
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(*r1 == *r2);
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
|
|
|
|
tracker.compare_key(x, *it);
|
|
|
|
|
2010-12-11 14:43:00 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
template <class X>
|
2008-01-20 18:55:57 +00:00
|
|
|
void map_tests(X*, test::random_generator generator = test::default_generator)
|
2006-05-21 17:14:11 +00:00
|
|
|
{
|
2006-10-31 22:19:26 +00:00
|
|
|
std::cerr<<"map tests.\n";
|
|
|
|
|
2006-05-21 17:14:11 +00:00
|
|
|
X x;
|
|
|
|
test::ordered<X> tracker = test::create_ordered(x);
|
|
|
|
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
2008-01-10 22:30:46 +00:00
|
|
|
for(BOOST_DEDUCED_TYPENAME test::random_values<X>::iterator it = v.begin();
|
2006-05-21 17:14:11 +00:00
|
|
|
it != v.end(); ++it)
|
|
|
|
{
|
2008-01-10 22:30:46 +00:00
|
|
|
BOOST_DEDUCED_TYPENAME X::size_type old_bucket_count = x.bucket_count();
|
2006-05-21 17:14:11 +00:00
|
|
|
float b = x.max_load_factor();
|
|
|
|
|
|
|
|
x[it->first] = it->second;
|
|
|
|
tracker[it->first] = it->second;
|
|
|
|
|
|
|
|
tracker.compare_key(x, *it);
|
|
|
|
|
2010-12-11 14:43:00 +00:00
|
|
|
if(static_cast<double>(x.size()) < b * static_cast<double>(old_bucket_count))
|
2009-05-27 17:44:09 +00:00
|
|
|
BOOST_TEST(x.bucket_count() == old_bucket_count);
|
2006-05-21 17:14:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
2010-01-04 22:49:39 +00:00
|
|
|
// Some tests for when the range's value type doesn't match the container's
|
|
|
|
// value type.
|
2009-10-03 16:42:20 +00:00
|
|
|
|
2006-10-31 22:19:26 +00:00
|
|
|
template <class X>
|
2010-01-04 22:49:39 +00:00
|
|
|
void map_insert_range_test1(X*,
|
|
|
|
test::random_generator generator = test::default_generator)
|
2006-10-31 22:19:26 +00:00
|
|
|
{
|
2009-10-03 16:42:20 +00:00
|
|
|
std::cerr<<"map_insert_range_test1\n";
|
2006-10-31 22:19:26 +00:00
|
|
|
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2010-01-04 22:49:39 +00:00
|
|
|
typedef test::list<
|
|
|
|
std::pair<
|
|
|
|
BOOST_DEDUCED_TYPENAME X::key_type,
|
|
|
|
BOOST_DEDUCED_TYPENAME X::mapped_type
|
|
|
|
>
|
|
|
|
> list;
|
2008-01-20 18:55:57 +00:00
|
|
|
test::random_values<X> v(1000, generator);
|
Merge in support for equality operators for the unordered containers and
hopefully better cross-platform support.
Merged revisions 44778-44835,44837-44918 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
r44778 | danieljames | 2008-04-26 17:15:44 +0100 (Sat, 26 Apr 2008) | 2 lines
Remove a trailing comma.
........
r44779 | danieljames | 2008-04-26 17:23:51 +0100 (Sat, 26 Apr 2008) | 1 line
Merge in support for equality operators.
........
r44780 | danieljames | 2008-04-26 17:28:44 +0100 (Sat, 26 Apr 2008) | 1 line
Use my own list container to avoid working around STL container bugs.
........
r44833 | danieljames | 2008-04-28 08:03:43 +0100 (Mon, 28 Apr 2008) | 1 line
Better equality tests.
........
r44834 | danieljames | 2008-04-28 08:04:03 +0100 (Mon, 28 Apr 2008) | 1 line
Remove a superfluous check.
........
r44835 | danieljames | 2008-04-28 08:04:21 +0100 (Mon, 28 Apr 2008) | 1 line
Add equality reference documentation.
........
r44916 | danieljames | 2008-04-30 08:16:52 +0100 (Wed, 30 Apr 2008) | 1 line
New version of list.hpp
........
r44917 | danieljames | 2008-04-30 08:18:31 +0100 (Wed, 30 Apr 2008) | 1 line
Support compilers without ADL in the compile tests.
........
r44918 | danieljames | 2008-04-30 08:25:20 +0100 (Wed, 30 Apr 2008) | 7 lines
Change the typedef of buffered functions as it was confusing MSVC 6.5
get_allocator wasn't compiling when the allocator workaround is used because it
couldn't cast from the wrapped allocator to an allocator of another type. So
use value_alloc_ when it's available (it's only unavailable on compilers with
C++0x support, which don't require the workaround).
........
[SVN r44919]
2008-04-30 07:57:04 +00:00
|
|
|
list l(v.begin(), v.end());
|
2006-10-31 22:19:26 +00:00
|
|
|
|
|
|
|
X x; x.insert(l.begin(), l.end());
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
2009-10-03 16:42:20 +00:00
|
|
|
template <class X>
|
2010-01-04 22:49:39 +00:00
|
|
|
void map_insert_range_test2(X*,
|
|
|
|
test::random_generator generator = test::default_generator)
|
2009-10-03 16:42:20 +00:00
|
|
|
{
|
|
|
|
std::cerr<<"map_insert_range_test2\n";
|
|
|
|
|
2011-08-14 18:52:43 +00:00
|
|
|
test::check_instances check_;
|
|
|
|
|
2010-01-04 22:49:39 +00:00
|
|
|
typedef test::list<
|
2011-03-16 21:34:08 +00:00
|
|
|
std::pair<BOOST_DEDUCED_TYPENAME X::key_type const, test::implicitly_convertible>
|
2010-01-04 22:49:39 +00:00
|
|
|
> list;
|
|
|
|
test::random_values<
|
2011-03-16 21:34:08 +00:00
|
|
|
boost::unordered_map<BOOST_DEDUCED_TYPENAME X::key_type, test::implicitly_convertible>
|
2010-01-04 22:49:39 +00:00
|
|
|
> v(1000, generator);
|
2009-10-03 16:42:20 +00:00
|
|
|
list l(v.begin(), v.end());
|
|
|
|
|
|
|
|
X x; x.insert(l.begin(), l.end());
|
|
|
|
|
|
|
|
test::check_equivalent_keys(x);
|
|
|
|
}
|
|
|
|
|
2010-01-04 22:49:39 +00:00
|
|
|
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;
|
2008-04-17 07:39:24 +00:00
|
|
|
|
|
|
|
using test::default_generator;
|
|
|
|
using test::generate_collisions;
|
|
|
|
|
|
|
|
UNORDERED_TEST(unique_insert_tests1,
|
|
|
|
((test_set)(test_map))
|
|
|
|
((default_generator)(generate_collisions))
|
|
|
|
)
|
|
|
|
|
|
|
|
UNORDERED_TEST(equivalent_insert_tests1,
|
|
|
|
((test_multiset)(test_multimap))
|
|
|
|
((default_generator)(generate_collisions))
|
|
|
|
)
|
|
|
|
|
|
|
|
UNORDERED_TEST(insert_tests2,
|
|
|
|
((test_set)(test_multiset)(test_map)(test_multimap))
|
|
|
|
((default_generator)(generate_collisions))
|
|
|
|
)
|
|
|
|
|
2010-02-16 22:33:10 +00:00
|
|
|
#if !defined(BOOST_NO_RVALUE_REFERENCES) && !defined(BOOST_NO_VARIADIC_TEMPLATES)
|
Merge support for emplace for compilers with rvalue references and variadic templates arguments, and better use of C++0x allocators.
Merged revisions 44058-44075,44078-44084,44086-44108,44110-44365,44367,44369-44414,44416-44419,44421-44457,44467-44469,44471-44511,44513-44535,44537-44737 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/trunk
................
r44467 | danieljames | 2008-04-16 18:35:56 +0100 (Wed, 16 Apr 2008) | 2 lines
Add C++-0x support to the test allocators.
................
r44468 | danieljames | 2008-04-16 18:36:06 +0100 (Wed, 16 Apr 2008) | 2 lines
Add a C++-0x node_constructor.
................
r44469 | danieljames | 2008-04-16 18:36:16 +0100 (Wed, 16 Apr 2008) | 2 lines
C++-0x constructor for node.
................
r44516 | danieljames | 2008-04-17 21:41:48 +0100 (Thu, 17 Apr 2008) | 16 lines
Merge in my work so far on implementing emplace for compilers with variadic
template & rvalue references.
Merged revisions 44059-44062 via svnmerge from
https://svn.boost.org/svn/boost/branches/unordered/dev
........
r44059 | danieljames | 2008-04-05 17:41:25 +0100 (Sat, 05 Apr 2008) | 1 line
First stab at implementing emplace - only for compilers with variadic template & rvalue references.
........
r44062 | danieljames | 2008-04-05 19:12:09 +0100 (Sat, 05 Apr 2008) | 1 line
Better variable template arguments, need to add proper support to BoostBook.
........
................
r44616 | danieljames | 2008-04-20 13:30:19 +0100 (Sun, 20 Apr 2008) | 1 line
Merge with trunk, fixes tabs.
................
r44618 | danieljames | 2008-04-20 13:42:38 +0100 (Sun, 20 Apr 2008) | 2 lines
Some extra compile tests.
................
r44619 | danieljames | 2008-04-20 13:42:50 +0100 (Sun, 20 Apr 2008) | 2 lines
Fix an error message.
................
r44703 | danieljames | 2008-04-21 20:19:50 +0100 (Mon, 21 Apr 2008) | 15 lines
Merge latest changes from trunk.
Merged revisions 44616-44702 via svnmerge from
https://svn.boost.org/svn/boost/trunk
........
r44650 | danieljames | 2008-04-20 22:08:57 +0100 (Sun, 20 Apr 2008) | 1 line
Update an include.
........
r44697 | danieljames | 2008-04-21 16:55:40 +0100 (Mon, 21 Apr 2008) | 1 line
Factor out the code for choosing the bucket count, and which bucket that hash values map to make it easier to experiment with alternative policies.
........
................
r44733 | danieljames | 2008-04-23 07:55:43 +0100 (Wed, 23 Apr 2008) | 2 lines
Remove 'reserve_extra'.
................
r44734 | danieljames | 2008-04-23 07:55:55 +0100 (Wed, 23 Apr 2008) | 2 lines
More unnecessary copy tests - showing some weakness in the emplace implementation.
................
r44735 | danieljames | 2008-04-23 07:56:06 +0100 (Wed, 23 Apr 2008) | 2 lines
More tests.
................
r44736 | danieljames | 2008-04-23 07:56:19 +0100 (Wed, 23 Apr 2008) | 2 lines
Comment out a test which requires a C++0x std::pair.
................
r44737 | danieljames | 2008-04-23 07:56:35 +0100 (Wed, 23 Apr 2008) | 2 lines
Avoid creating unnecessary copies in unordered_set::emplace and unordered_map::emplace.
................
[SVN r44738]
2008-04-23 07:09:58 +00:00
|
|
|
UNORDERED_TEST(unique_emplace_tests1,
|
|
|
|
((test_set)(test_map))
|
|
|
|
((default_generator)(generate_collisions))
|
|
|
|
)
|
|
|
|
|
|
|
|
UNORDERED_TEST(equivalent_emplace_tests1,
|
|
|
|
((test_multiset)(test_multimap))
|
|
|
|
((default_generator)(generate_collisions))
|
|
|
|
)
|
|
|
|
#endif
|
|
|
|
|
2008-04-17 07:39:24 +00:00
|
|
|
UNORDERED_TEST(map_tests,
|
|
|
|
((test_map))
|
|
|
|
((default_generator)(generate_collisions))
|
|
|
|
)
|
|
|
|
|
2009-10-03 16:42:20 +00:00
|
|
|
UNORDERED_TEST(map_insert_range_test1,
|
|
|
|
((test_map)(test_multimap))
|
|
|
|
((default_generator)(generate_collisions))
|
|
|
|
)
|
|
|
|
|
|
|
|
UNORDERED_TEST(map_insert_range_test2,
|
2008-04-17 07:39:24 +00:00
|
|
|
((test_map)(test_multimap))
|
|
|
|
((default_generator)(generate_collisions))
|
|
|
|
)
|
|
|
|
|
2012-03-02 16:43:58 +00:00
|
|
|
#if !defined(BOOST_NO_0X_HDR_INITIALIZER_LIST)
|
2009-10-03 16:41:32 +00:00
|
|
|
|
|
|
|
UNORDERED_AUTO_TEST(insert_initializer_list_set)
|
|
|
|
{
|
|
|
|
boost::unordered_set<int> set;
|
|
|
|
set.insert({1,2,3,1});
|
|
|
|
BOOST_TEST_EQ(set.size(), 3u);
|
|
|
|
BOOST_TEST(set.find(1) != set.end());
|
|
|
|
BOOST_TEST(set.find(4) == set.end());
|
|
|
|
}
|
|
|
|
|
|
|
|
UNORDERED_AUTO_TEST(insert_initializer_list_multiset)
|
|
|
|
{
|
|
|
|
boost::unordered_multiset<std::string> multiset;
|
2009-10-25 10:54:53 +00:00
|
|
|
//multiset.insert({});
|
2009-10-03 16:41:32 +00:00
|
|
|
BOOST_TEST(multiset.empty());
|
|
|
|
multiset.insert({"a"});
|
|
|
|
BOOST_TEST_EQ(multiset.size(), 1u);
|
|
|
|
BOOST_TEST(multiset.find("a") != multiset.end());
|
|
|
|
BOOST_TEST(multiset.find("b") == multiset.end());
|
|
|
|
multiset.insert({"a","b"});
|
|
|
|
BOOST_TEST(multiset.size() == 3);
|
|
|
|
BOOST_TEST_EQ(multiset.count("a"), 2u);
|
|
|
|
BOOST_TEST_EQ(multiset.count("b"), 1u);
|
|
|
|
BOOST_TEST_EQ(multiset.count("c"), 0u);
|
|
|
|
}
|
|
|
|
|
|
|
|
UNORDERED_AUTO_TEST(insert_initializer_list_map)
|
|
|
|
{
|
|
|
|
boost::unordered_map<std::string, std::string> map;
|
2009-10-25 10:54:53 +00:00
|
|
|
//map.insert({});
|
2009-10-03 16:41:32 +00:00
|
|
|
BOOST_TEST(map.empty());
|
|
|
|
map.insert({{"a", "b"},{"a", "b"},{"d", ""}});
|
|
|
|
BOOST_TEST_EQ(map.size(), 2u);
|
|
|
|
}
|
|
|
|
|
|
|
|
UNORDERED_AUTO_TEST(insert_initializer_list_multimap)
|
|
|
|
{
|
|
|
|
boost::unordered_multimap<std::string, std::string> multimap;
|
2009-10-25 10:54:53 +00:00
|
|
|
//multimap.insert({});
|
2009-10-03 16:41:32 +00:00
|
|
|
BOOST_TEST(multimap.empty());
|
|
|
|
multimap.insert({{"a", "b"},{"a", "b"},{"d", ""}});
|
|
|
|
BOOST_TEST_EQ(multimap.size(), 3u);
|
|
|
|
BOOST_TEST_EQ(multimap.count("a"), 2u);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2011-08-26 08:12:08 +00:00
|
|
|
struct overloaded_constructor
|
|
|
|
{
|
2011-08-27 11:29:04 +00:00
|
|
|
overloaded_constructor(int x1 = 1, int x2 = 2, int x3 = 3, int x4 = 4)
|
|
|
|
: x1(x1), x2(x2), x3(x3), x4(x4) {}
|
2011-08-26 08:12:08 +00:00
|
|
|
|
2011-08-27 11:29:04 +00:00
|
|
|
int x1, x2, x3, x4;
|
2011-08-26 08:12:08 +00:00
|
|
|
|
|
|
|
bool operator==(overloaded_constructor const& rhs) const
|
|
|
|
{
|
2011-08-27 11:29:04 +00:00
|
|
|
return x1 == rhs.x1 && x2 == rhs.x2 && x3 == rhs.x3 && x4 == rhs.x4;
|
|
|
|
}
|
|
|
|
|
|
|
|
friend std::size_t hash_value(overloaded_constructor const& x)
|
|
|
|
{
|
|
|
|
std::size_t hash = 0;
|
|
|
|
boost::hash_combine(hash, x.x1);
|
|
|
|
boost::hash_combine(hash, x.x2);
|
|
|
|
boost::hash_combine(hash, x.x3);
|
|
|
|
boost::hash_combine(hash, x.x4);
|
|
|
|
return hash;
|
2011-08-26 08:12:08 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
UNORDERED_AUTO_TEST(map_emplace_test)
|
|
|
|
{
|
|
|
|
boost::unordered_map<int, overloaded_constructor> x;
|
|
|
|
|
2011-09-08 21:11:16 +00:00
|
|
|
#if !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x5100))
|
2011-08-26 08:12:08 +00:00
|
|
|
x.emplace();
|
|
|
|
BOOST_TEST(x.find(0) != x.end() &&
|
|
|
|
x.find(0)->second == overloaded_constructor());
|
2011-09-08 21:11:16 +00:00
|
|
|
#endif
|
2011-08-26 08:12:08 +00:00
|
|
|
|
|
|
|
x.emplace(2, 3);
|
|
|
|
BOOST_TEST(x.find(2) != x.end() &&
|
|
|
|
x.find(2)->second == overloaded_constructor(3));
|
|
|
|
|
2011-08-31 22:57:57 +00:00
|
|
|
#if defined (BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT)
|
|
|
|
x.emplace(1);
|
|
|
|
BOOST_TEST(x.find(1) != x.end() &&
|
|
|
|
x.find(1)->second == overloaded_constructor());
|
|
|
|
|
2011-08-26 08:12:08 +00:00
|
|
|
x.emplace(4, 5, 6);
|
|
|
|
BOOST_TEST(x.find(4) != x.end() &&
|
|
|
|
x.find(4)->second == overloaded_constructor(5, 6));
|
|
|
|
|
|
|
|
x.emplace(7, 8, 9, 10);
|
|
|
|
BOOST_TEST(x.find(7) != x.end() &&
|
|
|
|
x.find(7)->second == overloaded_constructor(8, 9, 10));
|
2011-08-31 22:57:57 +00:00
|
|
|
#endif
|
2011-08-26 08:12:08 +00:00
|
|
|
}
|
|
|
|
|
2011-08-27 11:29:04 +00:00
|
|
|
UNORDERED_AUTO_TEST(set_emplace_test)
|
|
|
|
{
|
|
|
|
boost::unordered_set<overloaded_constructor> x;
|
|
|
|
overloaded_constructor check;
|
|
|
|
|
2011-09-08 21:11:16 +00:00
|
|
|
#if !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x5100))
|
2011-08-27 11:29:04 +00:00
|
|
|
x.emplace();
|
|
|
|
BOOST_TEST(x.find(check) != x.end() && *x.find(check) == check);
|
2011-09-08 21:11:16 +00:00
|
|
|
#endif
|
2011-08-27 11:29:04 +00:00
|
|
|
|
|
|
|
x.clear();
|
|
|
|
x.emplace(1);
|
|
|
|
check = overloaded_constructor(1);
|
|
|
|
BOOST_TEST(x.find(check) != x.end() && *x.find(check) == check);
|
|
|
|
|
|
|
|
x.clear();
|
|
|
|
x.emplace(2, 3);
|
|
|
|
check = overloaded_constructor(2, 3);
|
|
|
|
BOOST_TEST(x.find(check) != x.end() && *x.find(check) == check);
|
|
|
|
|
|
|
|
x.clear();
|
|
|
|
x.emplace(4, 5, 6);
|
|
|
|
check = overloaded_constructor(4, 5, 6);
|
|
|
|
BOOST_TEST(x.find(check) != x.end() && *x.find(check) == check);
|
|
|
|
|
|
|
|
x.clear();
|
|
|
|
x.emplace(7, 8, 9, 10);
|
|
|
|
check = overloaded_constructor(7, 8, 9, 10);
|
|
|
|
BOOST_TEST(x.find(check) != x.end() && *x.find(check) == check);
|
|
|
|
}
|
|
|
|
|
2011-08-29 09:40:41 +00:00
|
|
|
UNORDERED_AUTO_TEST(map_emplace_test2)
|
|
|
|
{
|
|
|
|
boost::unordered_map<overloaded_constructor, overloaded_constructor> x;
|
|
|
|
|
|
|
|
x.emplace(boost::unordered::piecewise_construct, boost::make_tuple(), boost::make_tuple());
|
|
|
|
BOOST_TEST(x.find(overloaded_constructor()) != x.end() &&
|
|
|
|
x.find(overloaded_constructor())->second == overloaded_constructor());
|
|
|
|
|
|
|
|
x.emplace(boost::unordered::piecewise_construct, boost::make_tuple(1), boost::make_tuple());
|
|
|
|
BOOST_TEST(x.find(overloaded_constructor(1)) != x.end() &&
|
|
|
|
x.find(overloaded_constructor(1))->second == overloaded_constructor());
|
|
|
|
|
|
|
|
x.emplace(boost::unordered::piecewise_construct, boost::make_tuple(2,3), boost::make_tuple(4,5,6));
|
|
|
|
BOOST_TEST(x.find(overloaded_constructor(2,3)) != x.end() &&
|
|
|
|
x.find(overloaded_constructor(2,3))->second == overloaded_constructor(4,5,6));
|
|
|
|
}
|
|
|
|
|
|
|
|
UNORDERED_AUTO_TEST(set_emplace_test2)
|
|
|
|
{
|
|
|
|
boost::unordered_set<std::pair<overloaded_constructor, overloaded_constructor> > x;
|
|
|
|
std::pair<overloaded_constructor, overloaded_constructor> check;
|
|
|
|
|
|
|
|
x.emplace(boost::unordered::piecewise_construct, boost::make_tuple(), boost::make_tuple());
|
|
|
|
BOOST_TEST(x.find(check) != x.end() && *x.find(check) == check);
|
|
|
|
|
|
|
|
x.clear();
|
|
|
|
x.emplace(boost::unordered::piecewise_construct, boost::make_tuple(1), boost::make_tuple(2,3));
|
|
|
|
check = std::make_pair(overloaded_constructor(1), overloaded_constructor(2, 3));;
|
|
|
|
BOOST_TEST(x.find(check) != x.end() && *x.find(check) == check);
|
|
|
|
}
|
|
|
|
|
2006-05-17 17:19:16 +00:00
|
|
|
}
|
2008-04-17 07:39:24 +00:00
|
|
|
|
|
|
|
RUN_TESTS()
|