| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 20:56:23 +00:00
										 |  |  | // Copyright 2006-2009 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-21 17:14:11 +00:00
										 |  |  | #include "./containers.hpp"
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  | #include "../helpers/helpers.hpp"
 | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | #include "../helpers/invariants.hpp"
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  | #include "../helpers/random_values.hpp"
 | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | #include "../helpers/strong.hpp"
 | 
					
						
							| 
									
										
										
										
											2017-05-04 19:30:18 +01:00
										 |  |  | #include "../helpers/tracker.hpp"
 | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | #include <cmath>
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  | #include <string>
 | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-07 10:57:35 +00:00
										 |  |  | test::seed_t initialize_seed(747373); | 
					
						
							| 
									
										
										
										
											2007-12-06 11:42:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | // Fill in a container so that it's about to rehash
 | 
					
						
							|  |  |  | template <typename T> void rehash_prep(T& x) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   using namespace std; | 
					
						
							| 
									
										
										
										
											2018-01-27 09:39:59 +00:00
										 |  |  |   typedef typename T::size_type size_type; | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   x.max_load_factor(0.25); | 
					
						
							|  |  |  |   size_type bucket_count = x.bucket_count(); | 
					
						
							|  |  |  |   size_type initial_elements = static_cast<size_type>( | 
					
						
							|  |  |  |     ceil((double)bucket_count * (double)x.max_load_factor()) - 1); | 
					
						
							|  |  |  |   test::random_values<T> v(initial_elements); | 
					
						
							|  |  |  |   x.insert(v.begin(), v.end()); | 
					
						
							|  |  |  |   BOOST_TEST(bucket_count == x.bucket_count()); | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | // Overload to generate inserters that need type information.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename Inserter, typename T> | 
					
						
							|  |  |  | Inserter generate(Inserter inserter, T&) | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   return inserter; | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | // Get the iterator returned from an insert/emplace.
 | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | template <typename T> T get_iterator(T const& x) { return x; } | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | template <typename T> T get_iterator(std::pair<T, bool> const& x) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   return x.first; | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Generic insert exception test for typical single element inserts..
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template <typename T, typename Inserter, typename Values> | 
					
						
							|  |  |  | void insert_exception_test_impl(T x, Inserter insert, Values const& v) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   test::strong<T> strong; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   test::ordered<T> tracker; | 
					
						
							|  |  |  |   tracker.insert(x.begin(), x.end()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     ENABLE_EXCEPTIONS; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |     for (typename Values::const_iterator it = v.begin(); it != v.end(); ++it) { | 
					
						
							|  |  |  |       strong.store(x, test::detail::tracker.count_allocations); | 
					
						
							|  |  |  |       insert(x, it); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } catch (...) { | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  |     test::check_equivalent_keys(x); | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |     insert.exception_check(x, strong); | 
					
						
							|  |  |  |     throw; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   test::check_equivalent_keys(x); | 
					
						
							|  |  |  |   insert.track(tracker, v.begin(), v.end()); | 
					
						
							|  |  |  |   tracker.compare(x); | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | // Simple insert exception test
 | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | template <typename T, typename Inserter> | 
					
						
							|  |  |  | void insert_exception_test(T*, Inserter insert, test::random_generator gen) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   for (int i = 0; i < 5; ++i) { | 
					
						
							|  |  |  |     test::random_values<T> v(10, gen); | 
					
						
							|  |  |  |     T x; | 
					
						
							| 
									
										
										
										
											2017-05-04 19:30:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |     EXCEPTION_LOOP(insert_exception_test_impl(x, generate(insert, x), v)); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | // Insert into a container which is about to hit its max load, so that it
 | 
					
						
							|  |  |  | // rehashes.
 | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | template <typename T, typename Inserter> | 
					
						
							|  |  |  | void insert_rehash_exception_test( | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   T*, Inserter insert, test::random_generator gen) | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   for (int i = 0; i < 5; ++i) { | 
					
						
							|  |  |  |     T x; | 
					
						
							|  |  |  |     rehash_prep(x); | 
					
						
							| 
									
										
										
										
											2017-05-04 19:30:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |     test::random_values<T> v2(5, gen); | 
					
						
							|  |  |  |     EXCEPTION_LOOP(insert_exception_test_impl(x, generate(insert, x), v2)); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | // Various methods for inserting a single element
 | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct inserter_base | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T> void exception_check(T& x, test::strong<T>& strong) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     std::string scope(test::scope); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (scope.find("hash::operator()") == std::string::npos) | 
					
						
							|  |  |  |       strong.test(x, test::detail::tracker.count_allocations); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   template <typename T, typename Iterator> | 
					
						
							|  |  |  |   void track(T& tracker, Iterator begin, Iterator end) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     tracker.insert(begin, end); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct insert_lvalue_type : inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.insert(*it); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } insert_lvalue; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct insert_lvalue_begin_type : inserter_base | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.insert(x.begin(), *it); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } insert_lvalue_begin; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct insert_lvalue_end_type : inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.insert(x.end(), *it); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } insert_lvalue_end; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  | template <typename T> struct insert_lvalue_pos_type_impl : inserter_base | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  |   typename T::iterator pos; | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  |   insert_lvalue_pos_type_impl(T& x) : pos(x.begin()) {} | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  |   template <typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     pos = get_iterator(x.insert(pos, *it)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  | struct insert_lvalue_pos_type | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   template <typename T> | 
					
						
							|  |  |  |   friend insert_lvalue_pos_type_impl<T> generate(insert_lvalue_pos_type, T& x) | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   { | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  |     return insert_lvalue_pos_type_impl<T>(x); | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } insert_lvalue_pos; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct insert_single_item_range_type : inserter_base | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.insert(it, test::next(it)); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } insert_single_item_range; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct emplace_lvalue_type : inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.emplace(*it); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } emplace_lvalue; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct emplace_lvalue_begin_type : inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.emplace_hint(x.begin(), *it); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } emplace_lvalue_begin; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct emplace_lvalue_end_type : inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.emplace_hint(x.end(), *it); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } emplace_lvalue_end; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  | template <typename T> struct emplace_lvalue_pos_type_impl : inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  |   typename T::iterator pos; | 
					
						
							| 
									
										
										
										
											2017-05-04 19:30:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  |   emplace_lvalue_pos_type_impl(T& x) : pos(x.begin()) {} | 
					
						
							| 
									
										
										
										
											2017-05-04 19:30:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  |   template <typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     pos = get_iterator(x.emplace_hint(pos, *it)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  | struct emplace_lvalue_pos_type | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   template <typename T> | 
					
						
							|  |  |  |   friend emplace_lvalue_pos_type_impl<T> generate(emplace_lvalue_pos_type, T& x) | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   { | 
					
						
							| 
									
										
										
										
											2018-01-20 08:49:40 +00:00
										 |  |  |     return emplace_lvalue_pos_type_impl<T>(x); | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } emplace_lvalue_pos; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Run the exception tests in various combinations.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test_set* test_set_; | 
					
						
							|  |  |  | test_multiset* test_multiset_; | 
					
						
							|  |  |  | test_map* test_map_; | 
					
						
							|  |  |  | test_multimap* test_multimap_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using test::default_generator; | 
					
						
							|  |  |  | using test::limited_range; | 
					
						
							|  |  |  | using test::generate_collisions; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clang-format off
 | 
					
						
							|  |  |  | UNORDERED_TEST(insert_exception_test, | 
					
						
							|  |  |  |     ((test_set_)(test_multiset_)(test_map_)(test_multimap_)) | 
					
						
							|  |  |  |     ((insert_lvalue)(insert_lvalue_begin)(insert_lvalue_end) | 
					
						
							|  |  |  |      (insert_lvalue_pos)(insert_single_item_range) | 
					
						
							|  |  |  |      (emplace_lvalue)(emplace_lvalue_begin)(emplace_lvalue_end) | 
					
						
							|  |  |  |      (emplace_lvalue_pos) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     ((default_generator)(limited_range)(generate_collisions)) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | UNORDERED_TEST(insert_rehash_exception_test, | 
					
						
							|  |  |  |     ((test_set_)(test_multiset_)(test_map_)(test_multimap_)) | 
					
						
							|  |  |  |     ((insert_lvalue)(insert_lvalue_begin)(insert_lvalue_end) | 
					
						
							|  |  |  |      (insert_lvalue_pos)(insert_single_item_range) | 
					
						
							|  |  |  |      (emplace_lvalue)(emplace_lvalue_begin)(emplace_lvalue_end) | 
					
						
							|  |  |  |      (emplace_lvalue_pos) | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     ((default_generator)(limited_range)(generate_collisions)) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | // clang-format on
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Repeat insert tests with pairs
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct pair_emplace_type : inserter_base | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.emplace(boost::unordered::piecewise_construct, | 
					
						
							|  |  |  |       boost::make_tuple(it->first), boost::make_tuple(it->second)); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } pair_emplace; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct pair_emplace2_type : inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.emplace_hint(x.begin(), boost::unordered::piecewise_construct, | 
					
						
							|  |  |  |       boost::make_tuple(it->first), | 
					
						
							|  |  |  |       boost::make_tuple(it->second.tag1_, it->second.tag2_)); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } pair_emplace2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test_pair_set* test_pair_set_; | 
					
						
							|  |  |  | test_pair_multiset* test_pair_multiset_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clang-format off
 | 
					
						
							|  |  |  | UNORDERED_TEST(insert_exception_test, | 
					
						
							|  |  |  |     ((test_pair_set_)(test_pair_multiset_)(test_map_)(test_multimap_)) | 
					
						
							|  |  |  |     ((pair_emplace)(pair_emplace2)) | 
					
						
							|  |  |  |     ((default_generator)(limited_range)(generate_collisions)) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | UNORDERED_TEST(insert_rehash_exception_test, | 
					
						
							|  |  |  |     ((test_pair_set_)(test_pair_multiset_)(test_map_)(test_multimap_)) | 
					
						
							|  |  |  |     ((pair_emplace)(pair_emplace2)) | 
					
						
							|  |  |  |     ((default_generator)(limited_range)(generate_collisions)) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | // clang-format on
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Test inserting using operator[]
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:46:37 +01:00
										 |  |  | struct try_emplace_type : inserter_base | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.try_emplace(it->first, it->second); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 18:46:37 +01:00
										 |  |  | } try_emplace; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct try_emplace2_type : inserter_base | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.try_emplace(it->first, it->second.tag1_, it->second.tag2_); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 18:46:37 +01:00
										 |  |  | } try_emplace2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct map_inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T> void exception_check(T& x, test::strong<T>& strong) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     std::string scope(test::scope); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (scope.find("hash::operator()") == std::string::npos && | 
					
						
							|  |  |  |         scope.find("::operator=") == std::string::npos) | 
					
						
							|  |  |  |       strong.test(x, test::detail::tracker.count_allocations); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   template <typename T, typename Iterator> | 
					
						
							|  |  |  |   void track(T& tracker, Iterator begin, Iterator end) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     for (; begin != end; ++begin) { | 
					
						
							|  |  |  |       tracker[begin->first] = begin->second; | 
					
						
							| 
									
										
										
										
											2006-05-21 17:14:11 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | }; | 
					
						
							| 
									
										
											  
											
												Merged revisions 41822-41992,41994-42101 via svnmerge from 
https://svn.boost.org/svn/boost/branches/unordered/dev
........
  r41822 | danieljames | 2007-12-07 12:51:54 +0000 (Fri, 07 Dec 2007) | 5 lines
  
  Change the macros to meet boost guidelines.
  
  I should really have done this before the review. At least it'll give them
  something to say.
........
  r41928 | danieljames | 2007-12-09 19:23:27 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Add some parameters to standalone documentation build.
........
  r41929 | danieljames | 2007-12-09 19:24:07 +0000 (Sun, 09 Dec 2007) | 1 line
  
  An extra rehash test for inserting a range.
........
  r41930 | danieljames | 2007-12-09 19:24:52 +0000 (Sun, 09 Dec 2007) | 1 line
  
  get_for_erase can be static because all the required information is in the iterator.
........
  r41931 | danieljames | 2007-12-09 19:31:00 +0000 (Sun, 09 Dec 2007) | 1 line
  
  ADL doesn't seem to be working properly on Visual C++ 7.1 when calling swap, so workaround this in the compile tests.
........
  r41932 | danieljames | 2007-12-09 19:44:46 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Try to make the erase exception requirements a little clearer.
........
  r41933 | danieljames | 2007-12-09 19:52:50 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Hopefully clearer comparison of accessors for comparison/hash function objects.
........
  r41943 | danieljames | 2007-12-10 00:03:53 +0000 (Mon, 10 Dec 2007) | 1 line
  
  Fix a typo.
........
  r41951 | danieljames | 2007-12-10 11:08:02 +0000 (Mon, 10 Dec 2007) | 1 line
  
  Use the locale in the case insensitive comparison, I really should add a test for this.
........
  r41994 | danieljames | 2007-12-13 00:26:05 +0000 (Thu, 13 Dec 2007) | 3 lines
  
  Hervé Brönnimann's improved explanation of the formula for avoiding
  invalidating iterators.
........
  r41995 | danieljames | 2007-12-13 00:30:46 +0000 (Thu, 13 Dec 2007) | 4 lines
  
  Explicity use the classic locale in the case insensitive example. I could make
  the locale a member, but that would make the example longer. Also, this would be
  a good place to put a note about the need for constant function objects.
........
  r41996 | danieljames | 2007-12-13 00:31:55 +0000 (Thu, 13 Dec 2007) | 1 line
  
  Pull the point examples out into test files - fixing a few bugs in the process.
........
  r41997 | danieljames | 2007-12-13 00:41:30 +0000 (Thu, 13 Dec 2007) | 3 lines
  
  A few reference links for boost::hash, it might be better to link to the
  first page of the Boost.Hash documentation though.
........
  r42092 | danieljames | 2007-12-16 10:07:27 +0000 (Sun, 16 Dec 2007) | 2 lines
  
  Fix some typos, and use American spelling.
........
  r42093 | danieljames | 2007-12-16 10:11:00 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Small documentation tweak.
........
  r42096 | danieljames | 2007-12-16 10:17:03 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Fix some reference documentation errors.
........
  r42097 | danieljames | 2007-12-16 10:28:08 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Document the explicit constructors.
........
  r42098 | danieljames | 2007-12-16 10:47:13 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Try to make the active issues and proposals a little clearer - including more obvious links to the relevant papers.
........
  r42099 | danieljames | 2007-12-16 10:52:30 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Fix some complexity errors in the comparison table.
........
  r42100 | danieljames | 2007-12-16 10:59:45 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Use Mapped instead of T in the documentation.
........
  r42101 | danieljames | 2007-12-16 11:06:16 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Remove hard-coded length of prime numbers.
........
[SVN r42187]
											
										 
											2007-12-19 23:09:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | struct map_insert_operator_type : map_inserter_base | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x[it->first] = it->second; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | } map_insert_operator; | 
					
						
							| 
									
										
											  
											
												Merged revisions 41822-41992,41994-42101 via svnmerge from 
https://svn.boost.org/svn/boost/branches/unordered/dev
........
  r41822 | danieljames | 2007-12-07 12:51:54 +0000 (Fri, 07 Dec 2007) | 5 lines
  
  Change the macros to meet boost guidelines.
  
  I should really have done this before the review. At least it'll give them
  something to say.
........
  r41928 | danieljames | 2007-12-09 19:23:27 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Add some parameters to standalone documentation build.
........
  r41929 | danieljames | 2007-12-09 19:24:07 +0000 (Sun, 09 Dec 2007) | 1 line
  
  An extra rehash test for inserting a range.
........
  r41930 | danieljames | 2007-12-09 19:24:52 +0000 (Sun, 09 Dec 2007) | 1 line
  
  get_for_erase can be static because all the required information is in the iterator.
........
  r41931 | danieljames | 2007-12-09 19:31:00 +0000 (Sun, 09 Dec 2007) | 1 line
  
  ADL doesn't seem to be working properly on Visual C++ 7.1 when calling swap, so workaround this in the compile tests.
........
  r41932 | danieljames | 2007-12-09 19:44:46 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Try to make the erase exception requirements a little clearer.
........
  r41933 | danieljames | 2007-12-09 19:52:50 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Hopefully clearer comparison of accessors for comparison/hash function objects.
........
  r41943 | danieljames | 2007-12-10 00:03:53 +0000 (Mon, 10 Dec 2007) | 1 line
  
  Fix a typo.
........
  r41951 | danieljames | 2007-12-10 11:08:02 +0000 (Mon, 10 Dec 2007) | 1 line
  
  Use the locale in the case insensitive comparison, I really should add a test for this.
........
  r41994 | danieljames | 2007-12-13 00:26:05 +0000 (Thu, 13 Dec 2007) | 3 lines
  
  Hervé Brönnimann's improved explanation of the formula for avoiding
  invalidating iterators.
........
  r41995 | danieljames | 2007-12-13 00:30:46 +0000 (Thu, 13 Dec 2007) | 4 lines
  
  Explicity use the classic locale in the case insensitive example. I could make
  the locale a member, but that would make the example longer. Also, this would be
  a good place to put a note about the need for constant function objects.
........
  r41996 | danieljames | 2007-12-13 00:31:55 +0000 (Thu, 13 Dec 2007) | 1 line
  
  Pull the point examples out into test files - fixing a few bugs in the process.
........
  r41997 | danieljames | 2007-12-13 00:41:30 +0000 (Thu, 13 Dec 2007) | 3 lines
  
  A few reference links for boost::hash, it might be better to link to the
  first page of the Boost.Hash documentation though.
........
  r42092 | danieljames | 2007-12-16 10:07:27 +0000 (Sun, 16 Dec 2007) | 2 lines
  
  Fix some typos, and use American spelling.
........
  r42093 | danieljames | 2007-12-16 10:11:00 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Small documentation tweak.
........
  r42096 | danieljames | 2007-12-16 10:17:03 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Fix some reference documentation errors.
........
  r42097 | danieljames | 2007-12-16 10:28:08 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Document the explicit constructors.
........
  r42098 | danieljames | 2007-12-16 10:47:13 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Try to make the active issues and proposals a little clearer - including more obvious links to the relevant papers.
........
  r42099 | danieljames | 2007-12-16 10:52:30 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Fix some complexity errors in the comparison table.
........
  r42100 | danieljames | 2007-12-16 10:59:45 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Use Mapped instead of T in the documentation.
........
  r42101 | danieljames | 2007-12-16 11:06:16 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Remove hard-coded length of prime numbers.
........
[SVN r42187]
											
										 
											2007-12-19 23:09:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:46:37 +01:00
										 |  |  | struct map_insert_or_assign_type : map_inserter_base | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   template <typename T, typename Iterator> void operator()(T& x, Iterator it) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     x.insert_or_assign(it->first, it->second); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 18:46:37 +01:00
										 |  |  | } map_insert_or_assign; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | // clang-format off
 | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  | UNORDERED_TEST(insert_exception_test, | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  |     ((test_map_)) | 
					
						
							| 
									
										
										
										
											2017-05-07 18:46:37 +01:00
										 |  |  |     ((try_emplace)(try_emplace2)(map_insert_operator)(map_insert_or_assign)) | 
					
						
							| 
									
										
										
										
											2017-05-07 18:43:50 +01:00
										 |  |  |     ((default_generator)(limited_range)(generate_collisions)) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | UNORDERED_TEST(insert_rehash_exception_test, | 
					
						
							|  |  |  |     ((test_map_)) | 
					
						
							| 
									
										
										
										
											2017-05-07 18:46:37 +01:00
										 |  |  |     ((try_emplace)(try_emplace2)(map_insert_operator)(map_insert_or_assign)) | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  |     ((default_generator)(limited_range)(generate_collisions)) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | // clang-format on
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 41822-41992,41994-42101 via svnmerge from 
https://svn.boost.org/svn/boost/branches/unordered/dev
........
  r41822 | danieljames | 2007-12-07 12:51:54 +0000 (Fri, 07 Dec 2007) | 5 lines
  
  Change the macros to meet boost guidelines.
  
  I should really have done this before the review. At least it'll give them
  something to say.
........
  r41928 | danieljames | 2007-12-09 19:23:27 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Add some parameters to standalone documentation build.
........
  r41929 | danieljames | 2007-12-09 19:24:07 +0000 (Sun, 09 Dec 2007) | 1 line
  
  An extra rehash test for inserting a range.
........
  r41930 | danieljames | 2007-12-09 19:24:52 +0000 (Sun, 09 Dec 2007) | 1 line
  
  get_for_erase can be static because all the required information is in the iterator.
........
  r41931 | danieljames | 2007-12-09 19:31:00 +0000 (Sun, 09 Dec 2007) | 1 line
  
  ADL doesn't seem to be working properly on Visual C++ 7.1 when calling swap, so workaround this in the compile tests.
........
  r41932 | danieljames | 2007-12-09 19:44:46 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Try to make the erase exception requirements a little clearer.
........
  r41933 | danieljames | 2007-12-09 19:52:50 +0000 (Sun, 09 Dec 2007) | 1 line
  
  Hopefully clearer comparison of accessors for comparison/hash function objects.
........
  r41943 | danieljames | 2007-12-10 00:03:53 +0000 (Mon, 10 Dec 2007) | 1 line
  
  Fix a typo.
........
  r41951 | danieljames | 2007-12-10 11:08:02 +0000 (Mon, 10 Dec 2007) | 1 line
  
  Use the locale in the case insensitive comparison, I really should add a test for this.
........
  r41994 | danieljames | 2007-12-13 00:26:05 +0000 (Thu, 13 Dec 2007) | 3 lines
  
  Hervé Brönnimann's improved explanation of the formula for avoiding
  invalidating iterators.
........
  r41995 | danieljames | 2007-12-13 00:30:46 +0000 (Thu, 13 Dec 2007) | 4 lines
  
  Explicity use the classic locale in the case insensitive example. I could make
  the locale a member, but that would make the example longer. Also, this would be
  a good place to put a note about the need for constant function objects.
........
  r41996 | danieljames | 2007-12-13 00:31:55 +0000 (Thu, 13 Dec 2007) | 1 line
  
  Pull the point examples out into test files - fixing a few bugs in the process.
........
  r41997 | danieljames | 2007-12-13 00:41:30 +0000 (Thu, 13 Dec 2007) | 3 lines
  
  A few reference links for boost::hash, it might be better to link to the
  first page of the Boost.Hash documentation though.
........
  r42092 | danieljames | 2007-12-16 10:07:27 +0000 (Sun, 16 Dec 2007) | 2 lines
  
  Fix some typos, and use American spelling.
........
  r42093 | danieljames | 2007-12-16 10:11:00 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Small documentation tweak.
........
  r42096 | danieljames | 2007-12-16 10:17:03 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Fix some reference documentation errors.
........
  r42097 | danieljames | 2007-12-16 10:28:08 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Document the explicit constructors.
........
  r42098 | danieljames | 2007-12-16 10:47:13 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Try to make the active issues and proposals a little clearer - including more obvious links to the relevant papers.
........
  r42099 | danieljames | 2007-12-16 10:52:30 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Fix some complexity errors in the comparison table.
........
  r42100 | danieljames | 2007-12-16 10:59:45 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Use Mapped instead of T in the documentation.
........
  r42101 | danieljames | 2007-12-16 11:06:16 +0000 (Sun, 16 Dec 2007) | 1 line
  
  Remove hard-coded length of prime numbers.
........
[SVN r42187]
											
										 
											2007-12-19 23:09:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | // Range insert tests
 | 
					
						
							| 
									
										
										
										
											2017-05-04 19:30:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | template <typename T, typename Values> | 
					
						
							|  |  |  | void insert_range_exception_test_impl(T x, Values const& v) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   test::ordered<T> tracker; | 
					
						
							|  |  |  |   tracker.insert(x.begin(), x.end()); | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   try { | 
					
						
							|  |  |  |     ENABLE_EXCEPTIONS; | 
					
						
							|  |  |  |     x.insert(v.begin(), v.end()); | 
					
						
							|  |  |  |   } catch (...) { | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  |     test::check_equivalent_keys(x); | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |     throw; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   test::check_equivalent_keys(x); | 
					
						
							|  |  |  |   tracker.insert(v.begin(), v.end()); | 
					
						
							|  |  |  |   tracker.compare(x); | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } | 
					
						
							| 
									
										
											  
											
												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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | template <typename T> | 
					
						
							|  |  |  | void insert_range_exception_test(T*, test::random_generator gen) | 
					
						
							| 
									
										
										
										
											2017-01-01 18:35:50 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   for (int i = 0; i < 5; ++i) { | 
					
						
							|  |  |  |     test::random_values<T> v(10, gen); | 
					
						
							|  |  |  |     T x; | 
					
						
							| 
									
										
										
										
											2017-05-04 19:30:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |     EXCEPTION_LOOP(insert_range_exception_test_impl(x, v)); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-01-01 18:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | template <typename T> | 
					
						
							|  |  |  | void insert_range_rehash_exception_test(T*, test::random_generator gen) | 
					
						
							| 
									
										
										
										
											2017-01-01 18:35:50 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |   for (int i = 0; i < 5; ++i) { | 
					
						
							|  |  |  |     T x; | 
					
						
							|  |  |  |     rehash_prep(x); | 
					
						
							| 
									
										
										
										
											2017-01-01 18:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-11 20:55:59 +01:00
										 |  |  |     test::random_values<T> v2(5, gen); | 
					
						
							|  |  |  |     EXCEPTION_LOOP(insert_range_exception_test_impl(x, v2)); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2017-05-07 17:54:34 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clang-format off
 | 
					
						
							|  |  |  | UNORDERED_TEST(insert_range_exception_test, | 
					
						
							|  |  |  |     ((test_set_)(test_multiset_)(test_map_)(test_multimap_)) | 
					
						
							|  |  |  |     ((default_generator)(limited_range)(generate_collisions)) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | UNORDERED_TEST(insert_range_rehash_exception_test, | 
					
						
							|  |  |  |     ((test_set_)(test_multiset_)(test_map_)(test_multimap_)) | 
					
						
							|  |  |  |     ((default_generator)(limited_range)(generate_collisions)) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | // clang-format on
 | 
					
						
							| 
									
										
										
										
											2017-01-01 18:35:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-07 17:05:36 +00:00
										 |  |  | RUN_TESTS() |