1// Copyright (C) 2011-2015 Free Software Foundation, Inc. 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8// 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13// 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17// 18// { dg-options "-std=gnu++11" } 19 20#include <unordered_set> 21#include <testsuite_hooks.h> 22 23void test01() 24{ 25 bool test __attribute__((unused)) = true; 26 std::unordered_set<int> us; 27 typedef typename std::unordered_set<int>::size_type size_type; 28 bool rehashed = false; 29 for (int i = 0; i != 100000; ++i) 30 { 31 size_type bkt_count = us.bucket_count(); 32 us.insert(i); 33 if (bkt_count != us.bucket_count()) 34 { 35 // Container has been rehashed, lets check that it won't be rehash again 36 // if we remove and restore the last 2 inserted elements: 37 rehashed = true; 38 bkt_count = us.bucket_count(); 39 VERIFY( us.erase(i) == 1 ); 40 VERIFY( bkt_count == us.bucket_count() ); 41 if (i > 0) 42 { 43 VERIFY( us.erase(i - 1) == 1 ); 44 VERIFY( bkt_count == us.bucket_count() ); 45 46 VERIFY( us.insert(i - 1).second ); 47 VERIFY( bkt_count == us.bucket_count() ); 48 } 49 VERIFY( us.insert(i).second ); 50 VERIFY( bkt_count == us.bucket_count() ); 51 } 52 } 53 54 // At lest we check a rehash once: 55 VERIFY( rehashed ); 56} 57 58int main() 59{ 60 test01(); 61 return 0; 62} 63