1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*********************************************************************************** 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott test_hash_set.cpp 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1997 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Mark of the Unicorn, Inc. 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use, copy, modify, distribute and sell this software 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and its documentation for any purpose is hereby granted without fee, 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided that the above copyright notice appear in all copies and 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * that both that copyright notice and this permission notice appear 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * in supporting documentation. Mark of the Unicorn makes no 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * representations about the suitability of this software for any 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * purpose. It is provided "as is" without express or implied warranty. 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott***********************************************************************************/ 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "Tests.h" 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined( EH_HASHED_CONTAINERS_IMPLEMENTED ) 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <hash_set> 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "TestClass.h" 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "LeakCheck.h" 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_construct.h" 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_assign_op.h" 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_push_back.h" 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_insert.h" 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_push_front.h" 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "ThrowCompare.h" 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "test_hash_resize.h" 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef EH_STD::__hash_multiset__<TestClass, ThrowHash, ThrowEqual, 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott eh_allocator(TestClass) > TestMultiSet; 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline multiset_tag 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcontainer_category(const TestMultiSet&) 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return multiset_tag(); 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid test_hash_multiset() 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !(defined (_MSC_VER) && (_MSC_VER < 1100)) 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestMultiSet testMultiSet, testMultiSet2; 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const size_t hash_setSize = random_number(random_base); 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott while ( testMultiSet.size() < hash_setSize ) 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestMultiSet::value_type x; 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott testMultiSet.insert( x ); 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott testMultiSet2.insert( TestMultiSet::value_type() ); 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined( EH_HASH_CONTAINERS_SUPPORT_RESIZE ) 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testMultiSet, test_hash_resize<TestMultiSet>() ); 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // TestMultiSet == TestMultiSet: no such operator! - ptr 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // StrongCheck( testMultiSet, test_insert_noresize<TestMultiSet>(testMultiSet) ); 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testMultiSet, test_insert_value<TestMultiSet>(testMultiSet) ); 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t insCnt = random_number(random_base); 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestMultiSet::value_type *insFirst = new TestMultiSet::value_type[1+insCnt]; 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testMultiSet, insert_range_tester(testMultiSet, insFirst, insFirst+insCnt) ); 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ConstCheck( 0, test_construct_pointer_range<TestMultiSet>(insFirst, insFirst+insCnt) ); 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott delete[] insFirst; 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testMultiSet, insert_range_tester(testMultiSet, testMultiSet2.begin(), testMultiSet2.end() ) ); 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ConstCheck( 0, test_default_construct<TestMultiSet>() ); 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if EH_HASH_CONTAINERS_SUPPORT_ITERATOR_CONSTRUCTION 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ConstCheck( 0, test_construct_iter_range_n<TestMultiSet>( testMultiSet2 ) ); 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ConstCheck( testMultiSet, test_copy_construct<TestMultiSet>() ); 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testMultiSet, test_assign_op<TestMultiSet>( testMultiSet2 ) ); 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttypedef EH_STD::__hash_set__<TestClass, ThrowHash, ThrowEqual, eh_allocator(TestClass) > TestSet; 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline set_tag 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottcontainer_category(const TestSet&) 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return set_tag(); 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid test_hash_set() 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !(defined (_MSC_VER) && (_MSC_VER < 1100)) 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestSet testSet, testSet2; 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const size_t hash_setSize = random_number(random_base); 94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott while ( testSet.size() < hash_setSize ) 96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestSet::value_type x; 98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott testSet.insert( x ); 99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott testSet2.insert( TestSet::value_type() ); 100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined( EH_HASH_CONTAINERS_SUPPORT_RESIZE ) 103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testSet, test_hash_resize<TestSet>() ); 104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // TestMultiSet == TestMultiSet: no such operator! - ptr 105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // StrongCheck( testSet, test_insert_noresize<TestSet>(testSet) ); 106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testSet, test_insert_value<TestSet>(testSet) ); 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_t insCnt = random_number(random_base); 110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott TestSet::value_type *insFirst = new TestSet::value_type[1+insCnt]; 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testSet, insert_range_tester(testSet, insFirst, insFirst+insCnt) ); 112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ConstCheck( 0, test_construct_pointer_range<TestSet>(insFirst, insFirst+insCnt) ); 113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott delete[] insFirst; 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testSet, insert_range_tester(testSet, testSet2.begin(), testSet2.end() ) ); 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ConstCheck( 0, test_default_construct<TestSet>() ); 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if EH_HASH_CONTAINERS_SUPPORT_ITERATOR_CONSTRUCTION 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ConstCheck( 0, test_construct_iter_range_n<TestSet>( testSet2 ) ); 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ConstCheck( testSet, test_copy_construct<TestSet>() ); 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott WeakCheck( testSet, test_assign_op<TestSet>( testSet2 ) ); 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif // EH_HASHED_CONTAINERS_IMPLEMENTED 128