From 6b65b7a91605af4418ed284b5f39a671656412ea Mon Sep 17 00:00:00 2001 From: Daniel James Date: Sun, 1 Jun 2008 18:00:53 +0000 Subject: [PATCH] Merge test improvements, pdf documentation improvements, some implementation tweaks. Merged revisions 45747-46030 via svnmerge from https://svn.boost.org/svn/boost/branches/unordered/trunk ................ r45747 | danieljames | 2008-05-25 18:03:30 +0100 (Sun, 25 May 2008) | 1 line Remove /branches/unordered/dev from svnmerge tracking. ................ r45874 | danieljames | 2008-05-28 18:54:53 +0100 (Wed, 28 May 2008) | 1 line Merge from trunk. ................ r45881 | danieljames | 2008-05-29 00:10:37 +0100 (Thu, 29 May 2008) | 2 lines Make it possible to use a custom generator in more places. ................ r45882 | danieljames | 2008-05-29 00:10:56 +0100 (Thu, 29 May 2008) | 2 lines Remove several unused parameters. ................ r45883 | danieljames | 2008-05-29 00:11:06 +0100 (Thu, 29 May 2008) | 2 lines No need to run move_construct_tests1 from move_construct_tests2, already calling it directly. ................ r45884 | danieljames | 2008-05-29 00:11:15 +0100 (Thu, 29 May 2008) | 2 lines Remove unused 'construct' as in trunk. ................ r45885 | danieljames | 2008-05-29 00:11:25 +0100 (Thu, 29 May 2008) | 2 lines More consistent implementations of insert_impl. ................ r45886 | danieljames | 2008-05-29 00:11:34 +0100 (Thu, 29 May 2008) | 2 lines No need to use the single argument version of methods when the variadic version is available. Frees up the non-variadic version for overloading to emulate variadic methods. ................ r45887 | danieljames | 2008-05-29 00:11:44 +0100 (Thu, 29 May 2008) | 2 lines Add another test, mainly to avoid an unused parameter warning. ................ r45888 | danieljames | 2008-05-29 00:11:54 +0100 (Thu, 29 May 2008) | 2 lines Adjust the pixels per inch of the buckets diagram so it'll fit on the page. ................ r45889 | danieljames | 2008-05-29 00:15:49 +0100 (Thu, 29 May 2008) | 1 line Improve pdf output, thanks to John Maddock. ................ r45890 | danieljames | 2008-05-29 00:17:45 +0100 (Thu, 29 May 2008) | 1 line Add an svg version of the bucket diagram. ................ r45891 | danieljames | 2008-05-29 00:18:11 +0100 (Thu, 29 May 2008) | 1 line Remove the original dia buckets diagram, I'm not using it anymore. ................ r46025 | danieljames | 2008-06-01 18:39:51 +0100 (Sun, 01 Jun 2008) | 1 line Initialise merging from doc. ................ r46030 | danieljames | 2008-06-01 18:54:36 +0100 (Sun, 01 Jun 2008) | 29 lines Merge in documentation improvements from the doc branch. Merged revisions 45892-46020 via svnmerge from https://svn.boost.org/svn/boost/branches/doc ........ r45892 | danieljames | 2008-05-29 00:30:07 +0100 (Thu, 29 May 2008) | 1 line Merge latest changes from unordered. ........ r46017 | danieljames | 2008-06-01 18:18:15 +0100 (Sun, 01 Jun 2008) | 2 lines Use both PNG and SVG versions of the buckets diagram. ........ r46018 | danieljames | 2008-06-01 18:18:27 +0100 (Sun, 01 Jun 2008) | 2 lines Improved function summary tables in unordered documenations. ........ r46019 | danieljames | 2008-06-01 18:18:39 +0100 (Sun, 01 Jun 2008) | 3 lines I'd hacked the bibliography to avoid showing the title twice, but this was causing problems when generating PDFs, so show the title twice. ........ r46020 | danieljames | 2008-06-01 18:18:52 +0100 (Sun, 01 Jun 2008) | 3 lines Don't use the compact boostbook refernce style in the standalone documentation as it is too wide for printing out. ........ ................ [SVN r46031] --- doc/Jamfile.v2 | 33 ++ doc/bibliography.xml | 4 +- doc/buckets.qbk | 88 +++-- doc/diagrams/buckets.dia | Bin 1858 -> 0 bytes doc/diagrams/buckets.png | Bin 13869 -> 13039 bytes doc/diagrams/buckets.svg | 313 ++++++++++++++++++ doc/hash_equality.qbk | 4 +- doc/unordered.qbk | 10 + .../unordered/detail/hash_table_impl.hpp | 19 +- test/exception/Jamfile.v2 | 2 +- test/helpers/exception_test.hpp | 2 +- test/objects/memory.hpp | 4 +- test/unordered/Jamfile.v2 | 2 +- test/unordered/bucket_tests.cpp | 4 +- test/unordered/compile_tests.hpp | 2 + test/unordered/constructor_tests.cpp | 4 +- test/unordered/copy_tests.cpp | 8 +- test/unordered/load_factor_tests.cpp | 4 +- test/unordered/move_tests.cpp | 18 +- test/unordered/rehash_tests.cpp | 4 +- test/unordered/swap_tests.cpp | 18 +- 21 files changed, 459 insertions(+), 84 deletions(-) delete mode 100644 doc/diagrams/buckets.dia create mode 100644 doc/diagrams/buckets.svg diff --git a/doc/Jamfile.v2 b/doc/Jamfile.v2 index a4512c08..99cd6cf1 100644 --- a/doc/Jamfile.v2 +++ b/doc/Jamfile.v2 @@ -3,6 +3,9 @@ # 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) +path-constant images_location : ../ ; +path-constant admonishment_location : ../../../../doc/src/images ; + xml unordered : unordered.qbk ; boostbook standalone : unordered : admon.graphics.path=images/ @@ -16,8 +19,38 @@ boostbook standalone : unordered : toc.section.depth=1 toc.max.depth=1 + boost.compact.typedef=0 + boost.compact.function=0 + boost.compact.enum=0 + css images + + # PDF Options: + # TOC Generation: this is needed for FOP-0.9 and later: + fop1.extensions=0 + pdf:xep.extensions=1 + # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9! + pdf:fop.extensions=0 + # No indent on body text: + pdf:body.start.indent=0pt + # Margin size: + pdf:page.margin.inner=0.5in + # Margin size: + pdf:page.margin.outer=0.5in + # Paper type = A4 + pdf:paper.type=A4 + # Yes, we want graphics for admonishments: + admon.graphics=1 + # Set this one for PDF generation *only*: + # default png graphics are awful in PDF form, + # better use SVG's instead: + pdf:admon.graphics.extension=".svg" + pdf:use.role.for.mediaobject=1 + pdf:preferred.mediaobject.role=print + pdf:img.src.path=$(images_location)/ + #pdf:admon.graphics.path=$(admonishment_location) + pdf:draft.mode="no" ; install css : [ glob $(BOOST_ROOT)/doc/src/*.css ] diff --git a/doc/bibliography.xml b/doc/bibliography.xml index 9b06b624..9a874073 100644 --- a/doc/bibliography.xml +++ b/doc/bibliography.xml @@ -1,6 +1,6 @@ -
+
+Bibliography - Bibliography C/C++ Users Journal diff --git a/doc/buckets.qbk b/doc/buckets.qbk index b1496dce..92695ad0 100644 --- a/doc/buckets.qbk +++ b/doc/buckets.qbk @@ -10,7 +10,7 @@ boost::unordered_set unordered_set] with 7 buckets containing 5 elements, `A`, `B`, `C`, `D` and `E` (this is just for illustration, containers will typically have more buckets). -[$../../libs/unordered/doc/diagrams/buckets.png] +[diagram buckets] In order to decide which bucket to place an element in, the container applies the hash function, `Hash`, to the element's key (for `unordered_set` and @@ -35,37 +35,53 @@ When looking for elements in this bucket up to 2 comparisons are made, making the search slower. This is known as a collision. To keep things fast we try to keep collisions to a minimum. -[table Methods for Accessing Buckets - [[Method] [Description]] - - [ - [``size_type bucket_count() const``] - [The number of buckets.] - ] - [ - [``size_type max_bucket_count() const``] - [An upper bound on the number of buckets.] - ] - [ - [``size_type bucket_size(size_type n) const``] - [The number of elements in bucket `n`.] - ] - [ - [``size_type bucket(key_type const& k) const``] - [Returns the index of the bucket which would contain k] - ] - [ - [`` - local_iterator begin(size_type n); - local_iterator end(size_type n); - const_local_iterator begin(size_type n) const; - const_local_iterator end(size_type n) const; - const_local_iterator cbegin(size_type n) const; - const_local_iterator cend(size_type n) const; - ``] - [Return begin and end iterators for bucket `n`.] - ] -] +''' +Methods for Accessing Buckets + + + Method + Description + + + + '''`size_type bucket_count() const`''' + '''The number of buckets.''' + + + '''`size_type max_bucket_count() const`''' + '''An upper bound on the number of buckets.''' + + + '''`size_type bucket_size(size_type n) const`''' + '''The number of elements in bucket `n`.''' + + + '''`size_type bucket(key_type const& k) const`''' + '''Returns the index of the bucket which would contain k''' + + + '''`local_iterator begin(size_type n);`''' + '''Return begin and end iterators for bucket `n`.''' + + + '''`local_iterator end(size_type n);`''' + + + '''`const_local_iterator begin(size_type n) const;`''' + + + '''`const_local_iterator end(size_type n) const;`''' + + + '''`const_local_iterator cbegin(size_type n) const;`''' + + + '''`const_local_iterator cend(size_type n) const;`''' + + + +
+''' [h2 Controlling the number of buckets] @@ -100,19 +116,19 @@ or close to the hint - unless your hint is unreasonably small or large. [[Method] [Description]] [ - [``float load_factor() const``] + [`float load_factor() const`] [The average number of elements per bucket.] ] [ - [``float max_load_factor() const``] + [`float max_load_factor() const`] [Returns the current maximum load factor.] ] [ - [``float max_load_factor(float z)``] + [`float max_load_factor(float z)`] [Changes the container's maximum load factor, using `z` as a hint.] ] [ - [``void rehash(size_type n)``] + [`void rehash(size_type n)`] [Changes the number of buckets so that there at least n buckets, and so that the load factor is less than the maximum load factor.] ] diff --git a/doc/diagrams/buckets.dia b/doc/diagrams/buckets.dia deleted file mode 100644 index b28596c95f278e62cee4c2580a41095e868d2bf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1858 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 + + + + + + + Bucket 1 + + + + Bucket 2 + + + + Bucket 3 + + + + Bucket 4 + + + + Bucket 5 + + + + Bucket 6 + + + + Bucket 7 + + + + A + + + B + + + C + + + D + + + E + diff --git a/doc/hash_equality.qbk b/doc/hash_equality.qbk index d9d00ef5..ca69f61f 100644 --- a/doc/hash_equality.qbk +++ b/doc/hash_equality.qbk @@ -63,11 +63,11 @@ won't work on other implementations of the unordered associative containers. [[Method] [Description]] [ - [``hasher hash_function() const``] + [`hasher hash_function() const`] [Returns the container's hash function.] ] [ - [``key_equal key_eq() const``] + [`key_equal key_eq() const`] [Returns the container's key equality function.] ] ] diff --git a/doc/unordered.qbk b/doc/unordered.qbk index c5d77915..e4f2ce6d 100644 --- a/doc/unordered.qbk +++ b/doc/unordered.qbk @@ -17,6 +17,16 @@ ] ] +[template diagram[name] ''' + + + + + + +'''] + + [include:unordered intro.qbk] [include:unordered buckets.qbk] [include:unordered hash_equality.qbk] diff --git a/include/boost/unordered/detail/hash_table_impl.hpp b/include/boost/unordered/detail/hash_table_impl.hpp index 5b0776cd..530f5025 100644 --- a/include/boost/unordered/detail/hash_table_impl.hpp +++ b/include/boost/unordered/detail/hash_table_impl.hpp @@ -1648,6 +1648,7 @@ namespace boost { #if BOOST_UNORDERED_EQUIVALENT_KEYS +#if !(defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)) // Insert (equivalent key containers) // if hash function throws, basic exception safety @@ -1676,7 +1677,8 @@ namespace boost { return insert_hint_impl(it, a); } -#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL) +#else + // Insert (equivalent key containers) // (I'm using an overloaded insert for both 'insert' and 'emplace') @@ -1850,6 +1852,8 @@ namespace boost { } } +#if !(defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL)) + // Insert (unique keys) // if hash function throws, basic exception safety @@ -1902,7 +1906,8 @@ namespace boost { return insert(v).first; } -#if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL) +#else + // Insert (unique keys) // (I'm using an overloaded insert for both 'insert' and 'emplace') // @@ -1949,10 +1954,8 @@ namespace boost { // Nothing after this point can throw. - link_ptr n = data_.link_node_in_bucket(a, bucket); - - return std::pair( - iterator_base(bucket, n), true); + return std::pair(iterator_base(bucket, + data_.link_node_in_bucket(a, bucket)), true); } } @@ -1993,7 +1996,7 @@ namespace boost { // if hash function throws, basic exception safety // strong otherwise template - iterator_base insert_hint(iterator_base const& it, Args&&... args) + iterator_base insert_hint(iterator_base const&, Args&&... args) { // Life is complicated - just call the normal implementation. return insert(std::forward(args)...).first; @@ -2148,7 +2151,7 @@ private: return it1 == end1 && it2 == end2; } #else - static inline bool group_equals(link_ptr it1, link_ptr it2, + static inline bool group_equals(link_ptr, link_ptr, type_wrapper*) { return true; diff --git a/test/exception/Jamfile.v2 b/test/exception/Jamfile.v2 index b41e9d97..92e25055 100644 --- a/test/exception/Jamfile.v2 +++ b/test/exception/Jamfile.v2 @@ -11,7 +11,7 @@ alias framework : ; project unordered-test/exception-tests : requirements intel-linux:"-strict_ansi -cxxlib-icc" - gcc:-Wsign-promo + gcc:"-Wsign-promo -Wunused-parameter" ; test-suite unordered-exception diff --git a/test/helpers/exception_test.hpp b/test/helpers/exception_test.hpp index b26042f0..8d216cdd 100644 --- a/test/helpers/exception_test.hpp +++ b/test/helpers/exception_test.hpp @@ -210,7 +210,7 @@ namespace test { } template - void exception_safety(Test const& f, char const* name) { + void exception_safety(Test const& f, char const* /*name*/) { test_runner runner(f); iteration = 0; diff --git a/test/objects/memory.hpp b/test/objects/memory.hpp index da2b26ed..29424d84 100644 --- a/test/objects/memory.hpp +++ b/test/objects/memory.hpp @@ -153,12 +153,12 @@ namespace test if(count_allocations > 0) --count_allocations; } - void track_construct(void* ptr, std::size_t /*size*/, int tag) + void track_construct(void* /*ptr*/, std::size_t /*size*/, int /*tag*/) { ++count_constructions; } - void track_destroy(void* ptr, std::size_t /*size*/, int tag) + void track_destroy(void* /*ptr*/, std::size_t /*size*/, int /*tag*/) { BOOST_CHECK(count_constructions > 0); if(count_constructions > 0) --count_constructions; diff --git a/test/unordered/Jamfile.v2 b/test/unordered/Jamfile.v2 index 5851c98d..d913e8e8 100644 --- a/test/unordered/Jamfile.v2 +++ b/test/unordered/Jamfile.v2 @@ -8,7 +8,7 @@ import testing ; project unordered-test/unordered : requirements intel-linux:"-strict_ansi -cxxlib-icc" - gcc:-Wsign-promo + gcc:"-Wsign-promo -Wunused-parameter" #msvc:/W4 ; diff --git a/test/unordered/bucket_tests.cpp b/test/unordered/bucket_tests.cpp index 181ff67c..d8b93d09 100644 --- a/test/unordered/bucket_tests.cpp +++ b/test/unordered/bucket_tests.cpp @@ -16,11 +16,11 @@ namespace bucket_tests { test::seed_t seed(54635); template -void tests(X* = 0) +void tests(X* = 0, test::random_generator generator = test::default_generator) { typedef BOOST_DEDUCED_TYPENAME X::size_type size_type; typedef BOOST_DEDUCED_TYPENAME X::const_local_iterator const_local_iterator; - test::random_values v(1000); + test::random_values v(1000, generator); X x(v.begin(), v.end()); diff --git a/test/unordered/compile_tests.hpp b/test/unordered/compile_tests.hpp index c64c67f8..5e65a72d 100644 --- a/test/unordered/compile_tests.hpp +++ b/test/unordered/compile_tests.hpp @@ -149,6 +149,8 @@ void unordered_map_test(X& r, Key const& k, T const& v) typedef BOOST_DEDUCED_TYPENAME X::key_type key_type; BOOST_MPL_ASSERT((boost::is_same >)); + r.insert(std::pair(k, v)); + #if defined(BOOST_HAS_RVALUE_REFS) && defined(BOOST_HAS_VARIADIC_TMPL) Key k_lvalue(k); T v_lvalue(v); diff --git a/test/unordered/constructor_tests.cpp b/test/unordered/constructor_tests.cpp index 0069ca1f..bdf5cd10 100644 --- a/test/unordered/constructor_tests.cpp +++ b/test/unordered/constructor_tests.cpp @@ -253,12 +253,12 @@ void constructor_tests2(T*, test::random_generator const& generator = test::defa } template -void map_constructor_test(T* = 0) +void map_constructor_test(T* = 0, test::random_generator const& generator = test::default_generator) { std::cerr<<"map_constructor_test\n"; typedef test::list > list; - test::random_values v(1000); + test::random_values v(1000, generator); list l(v.begin(), v.end()); T x(l.begin(), l.end()); diff --git a/test/unordered/copy_tests.cpp b/test/unordered/copy_tests.cpp index 7334ceee..30fe55a0 100644 --- a/test/unordered/copy_tests.cpp +++ b/test/unordered/copy_tests.cpp @@ -36,7 +36,7 @@ void copy_construct_tests1(T*, test::random_generator const& generator = test::d } { - test::random_values v(1000); + test::random_values v(1000, generator); T x(v.begin(), v.end()); T y(x); @@ -50,7 +50,7 @@ void copy_construct_tests1(T*, test::random_generator const& generator = test::d // is much lower than the load factor. The hash table is not allowed // to rehash, but the destination container should probably allocate // enough buckets to decrease the load factor appropriately. - test::random_values v(1000); + test::random_values v(1000, generator); T x(v.begin(), v.end()); x.max_load_factor(x.load_factor() / 4); T y(x); @@ -95,7 +95,7 @@ void copy_construct_tests2(T* ptr, test::random_generator const& generator = tes } { - test::random_values v(1000); + test::random_values v(1000, generator); T x(v.begin(), v.end(), 0, hf, eq, al); T y(x); @@ -106,7 +106,7 @@ void copy_construct_tests2(T* ptr, test::random_generator const& generator = tes } { - test::random_values v(500); + test::random_values v(500, generator); T x(v.begin(), v.end(), 0, hf, eq, al); T y(x, al2); diff --git a/test/unordered/load_factor_tests.cpp b/test/unordered/load_factor_tests.cpp index 0ace667b..d58c13d5 100644 --- a/test/unordered/load_factor_tests.cpp +++ b/test/unordered/load_factor_tests.cpp @@ -34,13 +34,13 @@ void set_load_factor_tests(X* = 0) } template -void insert_test(X*, float mlf) +void insert_test(X*, float mlf, test::random_generator generator = test::default_generator) { X x; x.max_load_factor(mlf); float b = x.max_load_factor(); - test::random_values values(1000); + test::random_values values(1000, generator); for(BOOST_DEDUCED_TYPENAME test::random_values::const_iterator it = values.begin(), end = values.end(); it != end; ++it) diff --git a/test/unordered/move_tests.cpp b/test/unordered/move_tests.cpp index 53f1d662..089f37f3 100644 --- a/test/unordered/move_tests.cpp +++ b/test/unordered/move_tests.cpp @@ -17,7 +17,7 @@ namespace move_tests test::seed_t seed(98624); template - T empty(T* ptr) { + T empty(T*) { return T(); } @@ -61,7 +61,7 @@ namespace move_tests } { - test::random_values v(1000); + test::random_values v(1000, generator); test::object_count count; T y(create(v, count)); BOOST_CHECK(count == test::global_object_count); @@ -71,10 +71,10 @@ namespace move_tests } template - void move_assign_tests1(T* ptr, test::random_generator const& generator = test::default_generator) + void move_assign_tests1(T*, test::random_generator const& generator = test::default_generator) { { - test::random_values v(500); + test::random_values v(500, generator); test::object_count count; T y; y = create(v, count); @@ -85,11 +85,9 @@ namespace move_tests } template - void move_construct_tests2(T* ptr, + void move_construct_tests2(T*, test::random_generator const& generator = test::default_generator) { - move_construct_tests1(ptr); - BOOST_DEDUCED_TYPENAME T::hasher hf(1); BOOST_DEDUCED_TYPENAME T::key_equal eq(1); BOOST_DEDUCED_TYPENAME T::allocator_type al(1); @@ -98,7 +96,7 @@ namespace move_tests test::object_count count; { - test::random_values v(500); + test::random_values v(500, generator); T y(create(v, count, hf, eq, al, 0.5)); BOOST_CHECK(count == test::global_object_count); test::check_container(y, v); @@ -111,7 +109,7 @@ namespace move_tests { // TODO: To do this correctly requires the fancy new allocator stuff. - test::random_values v(500); + test::random_values v(500, generator); T y(create(v, count, hf, eq, al, 2.0), al2); BOOST_CHECK(count != test::global_object_count); test::check_container(y, v); @@ -123,7 +121,7 @@ namespace move_tests } { - test::random_values v(25); + test::random_values v(25, generator); T y(create(v, count, hf, eq, al, 1.0), al); #if defined(BOOST_HAS_RVALUE_REFS) BOOST_CHECK(count == test::global_object_count); diff --git a/test/unordered/rehash_tests.cpp b/test/unordered/rehash_tests.cpp index f4c59822..cfcc41cb 100644 --- a/test/unordered/rehash_tests.cpp +++ b/test/unordered/rehash_tests.cpp @@ -33,9 +33,9 @@ void rehash_empty_test1(X* = 0) } template -void rehash_test1(X* = 0) +void rehash_test1(X* = 0, test::random_generator generator = test::default_generator) { - test::random_values v(1000); + test::random_values v(1000, generator); test::ordered tracker; tracker.insert_range(v.begin(), v.end()); X x(v.begin(), v.end()); diff --git a/test/unordered/swap_tests.cpp b/test/unordered/swap_tests.cpp index 4bc39bfb..a036362c 100644 --- a/test/unordered/swap_tests.cpp +++ b/test/unordered/swap_tests.cpp @@ -32,7 +32,7 @@ void swap_test_impl(X& x1, X& x2) } template -void swap_tests1(X* = 0) +void swap_tests1(X*, test::random_generator generator = test::default_generator) { { X x; @@ -45,14 +45,14 @@ void swap_tests1(X* = 0) } { - test::random_values v(1000); + test::random_values v(1000, generator); X x, y(v.begin(), v.end()); swap_test_impl(x, y); swap_test_impl(x, y); } { - test::random_values vx(1000), vy(1000); + test::random_values vx(1000, generator), vy(1000, generator); X x(vx.begin(), vx.end()), y(vy.begin(), vy.end()); swap_test_impl(x, y); swap_test_impl(x, y); @@ -60,7 +60,7 @@ void swap_tests1(X* = 0) } template -void swap_tests2(X* ptr = 0) +void swap_tests2(X* ptr = 0, test::random_generator generator = test::default_generator) { swap_tests1(ptr); @@ -75,14 +75,14 @@ void swap_tests2(X* ptr = 0) } { - test::random_values v(1000); + test::random_values v(1000, generator); X x(v.begin(), v.end(), 0, hasher(1), key_equal(1)); X y(0, hasher(2), key_equal(2)); swap_test_impl(x, y); } { - test::random_values vx(100), vy(50); + test::random_values vx(100, generator), vy(50, generator); X x(vx.begin(), vx.end(), 0, hasher(1), key_equal(1)); X y(vy.begin(), vy.end(), 0, hasher(2), key_equal(2)); swap_test_impl(x, y); @@ -91,7 +91,7 @@ void swap_tests2(X* ptr = 0) #if BOOST_UNORDERED_SWAP_METHOD == 1 { - test::random_values vx(100), vy(50); + test::random_values vx(100, generator), vy(50, generator); X x(vx.begin(), vx.end(), 0, hasher(), key_equal(), allocator_type(1)); X y(vy.begin(), vy.end(), 0, hasher(), key_equal(), allocator_type(2)); try { @@ -101,14 +101,14 @@ void swap_tests2(X* ptr = 0) } #else { - test::random_values vx(50), vy(100); + test::random_values vx(50, generator), vy(100, generator); X x(vx.begin(), vx.end(), 0, hasher(), key_equal(), allocator_type(1)); X y(vy.begin(), vy.end(), 0, hasher(), key_equal(), allocator_type(2)); swap_test_impl(x, y); } { - test::random_values vx(100), vy(100); + test::random_values vx(100, generator), vy(100, generator); X x(vx.begin(), vx.end(), 0, hasher(1), key_equal(1), allocator_type(1)); X y(vy.begin(), vy.end(), 0, hasher(2), key_equal(2), allocator_type(2)); swap_test_impl(x, y);