First public contribution.
1 /***********************************************************************************
5 * Mark of the Unicorn, Inc.
7 * Permission to use, copy, modify, distribute and sell this software
8 * and its documentation for any purpose is hereby granted without fee,
9 * provided that the above copyright notice appear in all copies and
10 * that both that copyright notice and this permission notice appear
11 * in supporting documentation. Mark of the Unicorn makes no
12 * representations about the suitability of this software for any
13 * purpose. It is provided "as is" without express or implied warranty.
15 ***********************************************************************************/
17 #include "TestClass.h"
18 #include "LeakCheck.h"
19 # if defined (EH_NEW_HEADERS)
24 #include "test_construct.h"
25 #include "test_assign_op.h"
26 #include "test_push_back.h"
27 #include "test_insert.h"
28 #include "test_push_front.h"
30 # if defined (__GNUC__) && defined (__APPLE__)
31 typedef EH_STD::vector<TestClass, eh_allocator(TestClass) > TestVector;
33 typedef EH_STD::__vector__<TestClass, eh_allocator(TestClass) > TestVector;
36 inline sequence_container_tag
37 container_category(const TestVector&)
39 return sequence_container_tag();
42 void prepare_insert_n( TestVector& c, size_t insCnt );
44 void prepare_insert_n( TestVector& c, size_t insCnt )
46 if ( random_number(2) )
47 c.reserve( c.size() + insCnt );
52 test_reserve( size_t n ) : fAmount(n) {
53 gTestController.SetCurrentTestName("vector::reserve()");
56 void operator()( TestVector& v ) const
64 inline void prepare_insert_range( TestVector& vec, size_t, TestClass* first, TestClass* last )
66 if ( random_number(2) )
69 EH_DISTANCE( first, last, d );
70 vec.reserve( vec.size() + d );
77 ConstCheck( 0, test_construct_n<TestVector>( random_number(random_base) ) );
79 TestVector emptyVector;
80 TestVector testVector, testVector2;
81 size_t vectorSize = random_number(random_base);
83 testVector.reserve(vectorSize*4);
84 while ( testVector.size() < vectorSize )
87 testVector.push_back( x );
88 testVector2.push_back( TestClass() );
91 size_t insCnt = random_number(random_base);
92 TestClass *insFirst = new TestVector::value_type[1+ insCnt];
94 ConstCheck( 0, test_construct_pointer_range<TestVector>(insFirst, insFirst+insCnt) );
96 WeakCheck( testVector, insert_range_tester(testVector, insFirst, insFirst+insCnt) );
97 WeakCheck( testVector, insert_range_at_begin_tester(testVector, insFirst, insFirst+insCnt) );
98 WeakCheck( testVector, insert_range_at_end_tester(testVector, insFirst, insFirst+insCnt) );
101 WeakCheck( testVector, test_insert_one<TestVector>(testVector) );
102 WeakCheck( testVector, test_insert_one<TestVector>(testVector, 0) );
103 WeakCheck( testVector, test_insert_one<TestVector>(testVector, (int)testVector.size()) );
105 WeakCheck( testVector, test_insert_n<TestVector>(testVector, random_number(random_base) ) );
106 WeakCheck( testVector, test_insert_n<TestVector>(testVector, random_number(random_base), 0 ) );
107 WeakCheck( testVector, test_insert_n<TestVector>(testVector, random_number(random_base), (int)testVector.size() ) );
109 WeakCheck( testVector, insert_range_tester(testVector, testVector2.begin(), testVector2.end() ) );
112 StrongCheck( testVector, test_reserve( testVector.capacity() + random_number(random_base) ) );
113 StrongCheck( testVector, test_push_back<TestVector>(testVector) );
114 StrongCheck( emptyVector, test_push_back<TestVector>(emptyVector) );
116 ConstCheck( 0, test_default_construct<TestVector>() );
117 ConstCheck( 0, test_construct_n_instance<TestVector>( random_number(random_base) ) );
118 ConstCheck( 0, test_construct_iter_range<TestVector>( testVector2 ) );
119 ConstCheck( testVector, test_copy_construct<TestVector>() );
121 testVector2.resize( testVector.size() * 3 / 2 );
122 WeakCheck( testVector, test_assign_op<TestVector>( testVector2 ) );
124 testVector2.resize( testVector.size() * 2 / 3 );
125 WeakCheck( testVector, test_assign_op<TestVector>( testVector2 ) );