OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-dev/] [fsf-gcc-snapshot-1-mar-12/] [or1k-gcc/] [libstdc++-v3/] [testsuite/] [23_containers/] [unordered_multiset/] [insert/] [hash_policy.cc] - Blame information for rev 783

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 742 jeremybenn
// { dg-options "-std=gnu++0x" }
2
 
3
// Copyright (C) 2011 Free Software Foundation, Inc.
4
//
5
// This file is part of the GNU ISO C++ Library.  This library is free
6
// software; you can redistribute it and/or modify it under the
7
// terms of the GNU General Public License as published by the
8
// Free Software Foundation; either version 3, or (at your option)
9
// any later version.
10
//
11
// This library is distributed in the hope that it will be useful,
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
// GNU General Public License for more details.
15
//
16
// You should have received a copy of the GNU General Public License along
17
// with this library; see the file COPYING3.  If not see
18
// <http://www.gnu.org/licenses/>.
19
 
20
#include <unordered_set>
21
#include <limits>
22
#include <ext/throw_allocator.h>
23
#include <testsuite_hooks.h>
24
 
25
void test01()
26
{
27
  bool test __attribute__((unused)) = true;
28
 
29
  typedef std::numeric_limits<size_t> nl_size_t;
30
  std::unordered_multiset<int, std::hash<int>, std::equal_to<int>,
31
                          __gnu_cxx::throw_allocator_limit<int> > us;
32
  const int nb = 100;
33
  int scheduled_throw_counter = 0;
34
  std::size_t thrown_exceptions = 0;
35
  for (int i = 0; i != nb; ++i)
36
    {
37
      if ((float)(us.size() + 1)
38
          / (float)us.bucket_count() >= us.max_load_factor())
39
        {
40
          // We are going to need a rehash, lets introduce allocation issues:
41
          __gnu_cxx::limit_condition::set_limit(scheduled_throw_counter++);
42
        }
43
      try
44
        {
45
          us.insert(i / 2);
46
          scheduled_throw_counter = 0;
47
        }
48
      catch (const __gnu_cxx::forced_error&)
49
        {
50
          ++thrown_exceptions;
51
          --i;
52
        }
53
      VERIFY( us.load_factor() <= us.max_load_factor() );
54
      __gnu_cxx::limit_condition::set_limit(nl_size_t::max());
55
    }
56
 
57
  VERIFY( thrown_exceptions != 0 );
58
  // Check that all values have been inserted:
59
  for (int i = 0; i != nb / 2; ++i)
60
    {
61
      VERIFY( us.count(i) == 2 );
62
    }
63
}
64
 
65
int main()
66
{
67
  test01();
68
  return 0;
69
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.