1181834Sroberto// 2004-07-26 Matt Austern <austern@apple.com> 2181834Sroberto// 3181834Sroberto// Copyright (C) 2003 Free Software Foundation, Inc. 4181834Sroberto// 5181834Sroberto// This file is part of the GNU ISO C++ Library. This library is free 6181834Sroberto// software; you can redistribute it and/or modify it under the 7181834Sroberto// terms of the GNU General Public License as published by the 8181834Sroberto// Free Software Foundation; either version 2, or (at your option) 9181834Sroberto// any later version. 10181834Sroberto// 11181834Sroberto// This library is distributed in the hope that it will be useful, 12181834Sroberto// but WITHOUT ANY WARRANTY; without even the implied warranty of 13181834Sroberto// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14181834Sroberto// GNU General Public License for more details. 15181834Sroberto// 16181834Sroberto// You should have received a copy of the GNU General Public License along 17181834Sroberto// with this library; see the file COPYING. If not, write to the Free 18181834Sroberto// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19181834Sroberto// USA. 20181834Sroberto// 21181834Sroberto// As a special exception, you may use this file as part of a free software 22181834Sroberto// library without restriction. Specifically, if other files instantiate 23181834Sroberto// templates or use macros or inline functions from this file, or you compile 24181834Sroberto// this file and link it with other files to produce an executable, this 25181834Sroberto// file does not by itself cause the resulting executable to be covered by 26181834Sroberto// the GNU General Public License. This exception does not however 27// invalidate any other reasons why the executable file might be covered by 28// the GNU General Public License. 29 30#include <ext/hash_set> 31#include <functional> 32#include <iterator> 33#include <testsuite_allocator.h> 34 35using namespace __gnu_test; 36 37int main() 38{ 39 typedef __gnu_cxx::hash_set<int, __gnu_cxx::hash<int>, std::equal_to<int>, 40 tracker_alloc<int> > 41 Container; 42 43 const int arr10[10] = { 2, 4, 1, 7, 3, 8, 10, 5, 9, 6 }; 44 const int arr10a[10] = { 31, 23, 82, 46, 13, 17, 30, 71, 22, 51 }; 45 bool ok = true; 46 47 int buckets; 48 49 allocation_tracker::resetCounts(); 50 { 51 Container c; 52 buckets = c.bucket_count(); 53 ok = check_construct_destroy("empty container", buckets, 0) && ok; 54 } 55 ok = check_construct_destroy("empty container", buckets, buckets) && ok; 56 57 58 allocation_tracker::resetCounts(); 59 { 60 Container c(arr10, arr10 + 10); 61 ok = check_construct_destroy("Construct from range", buckets+10, 0) && ok; 62 } 63 ok = check_construct_destroy("Construct from range", buckets+10, buckets+10) && ok; 64 65 allocation_tracker::resetCounts(); 66 { 67 Container c(arr10, arr10 + 10); 68 c.insert(arr10a[0]); 69 ok = check_construct_destroy("Insert element", buckets+11, 0) && ok; 70 } 71 ok = check_construct_destroy("Insert element", buckets+11, buckets+11) && ok; 72 73 allocation_tracker::resetCounts(); 74 { 75 Container c(arr10, arr10 + 10); 76 c.insert(arr10a, arr10a+3); 77 ok = check_construct_destroy("Insert short range", buckets+13, 0) && ok; 78 } 79 ok = check_construct_destroy("Insert short range", buckets+13, buckets+13) && ok; 80 81 allocation_tracker::resetCounts(); 82 { 83 Container c(arr10, arr10 + 10); 84 c.insert(arr10a, arr10a+10); 85 ok = check_construct_destroy("Insert long range", buckets+20, 0) && ok; 86 } 87 ok = check_construct_destroy("Insert long range", buckets+20, buckets+20) && ok; 88 89 return ok ? 0 : 1; 90} 91 92