1// { dg-options "-Wno-deprecated" } 2 3// 2004-07-26 Matt Austern <austern@apple.com> 4// 5// Copyright (C) 2003, 2007, 2009 Free Software Foundation, Inc. 6// 7// This file is part of the GNU ISO C++ Library. This library is free 8// software; you can redistribute it and/or modify it under the 9// terms of the GNU General Public License as published by the 10// Free Software Foundation; either version 3, or (at your option) 11// any later version. 12// 13// This library is distributed in the hope that it will be useful, 14// but WITHOUT ANY WARRANTY; without even the implied warranty of 15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16// GNU General Public License for more details. 17// 18// You should have received a copy of the GNU General Public License along 19// with this library; see the file COPYING3. If not see 20// <http://www.gnu.org/licenses/>. 21// 22 23#include <hash_set> 24#include <functional> 25#include <iterator> 26#include <testsuite_allocator.h> 27 28using namespace __gnu_test; 29 30int main() 31{ 32 typedef __gnu_cxx::hash_set<int, __gnu_cxx::hash<int>, std::equal_to<int>, 33 tracker_allocator<int> > 34 Container; 35 36 const int arr10[10] = { 2, 4, 1, 7, 3, 8, 10, 5, 9, 6 }; 37 const int arr10a[10] = { 31, 23, 82, 46, 13, 17, 30, 71, 22, 51 }; 38 bool ok = true; 39 40 int buckets; 41 42 tracker_allocator_counter::reset(); 43 { 44 Container c; 45 buckets = c.bucket_count(); 46 ok = check_construct_destroy("empty container", buckets, 0) && ok; 47 } 48 ok = check_construct_destroy("empty container", buckets, buckets) && ok; 49 50 51 tracker_allocator_counter::reset(); 52 { 53 Container c(arr10, arr10 + 10); 54 ok = check_construct_destroy("Construct from range", buckets+10, 0) && ok; 55 } 56 ok = check_construct_destroy("Construct from range", buckets+10, buckets+10) && ok; 57 58 tracker_allocator_counter::reset(); 59 { 60 Container c(arr10, arr10 + 10); 61 c.insert(arr10a[0]); 62 ok = check_construct_destroy("Insert element", buckets+11, 0) && ok; 63 } 64 ok = check_construct_destroy("Insert element", buckets+11, buckets+11) && ok; 65 66 tracker_allocator_counter::reset(); 67 { 68 Container c(arr10, arr10 + 10); 69 c.insert(arr10a, arr10a+3); 70 ok = check_construct_destroy("Insert short range", buckets+13, 0) && ok; 71 } 72 ok = check_construct_destroy("Insert short range", buckets+13, buckets+13) && ok; 73 74 tracker_allocator_counter::reset(); 75 { 76 Container c(arr10, arr10 + 10); 77 c.insert(arr10a, arr10a+10); 78 ok = check_construct_destroy("Insert long range", buckets+20, 0) && ok; 79 } 80 ok = check_construct_destroy("Insert long range", buckets+20, buckets+20) && ok; 81 82 return ok ? 0 : 1; 83} 84 85