diff options
Diffstat (limited to 'libstdc++-v3/testsuite/23_containers/unordered_map/modifiers')
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc index e9cf7fd6f67..7f34325df87 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc @@ -18,23 +18,46 @@ // <http://www.gnu.org/licenses/>. #include <unordered_map> + #include <testsuite_hooks.h> void test01() { - const int N = 1000; - typedef std::unordered_map<int, int> Map; Map m; - m.reserve(N); - std::size_t bkts = m.bucket_count(); - for (int i = 0; i != N; ++i) + // Make sure max load factor is 1 so that reserved elements is directly + // the bucket count. + m.max_load_factor(1); + + int i = -1; + for (;;) { - m.insert(std::make_pair(i, i)); - // As long as we insert less than the reserved number of elements we - // shouldn't experiment any rehash. + m.reserve(m.bucket_count()); + + std::size_t bkts = m.bucket_count(); + + m.reserve(bkts); VERIFY( m.bucket_count() == bkts ); + + for (++i; i < bkts; ++i) + { + m.insert(std::make_pair(i, i)); + + // As long as we insert less than the reserved number of elements we + // shouldn't experiment any rehash. + VERIFY( m.bucket_count() == bkts ); + + VERIFY( m.load_factor() <= m.max_load_factor() ); + } + + // One more element should rehash. + m.insert(std::make_pair(i, i)); + VERIFY( m.bucket_count() != bkts ); + VERIFY( m.load_factor() <= m.max_load_factor() ); + + if (i > 1024) + break; } } |