]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/rehash.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 23_containers / unordered_set / hash_policy / rehash.cc
1 // Copyright (C) 2011-2016 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
23 void 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
58 int main()
59 {
60 test01();
61 return 0;
62 }