3 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
10 #include "cppunit/cppunit_proxy.h"
12 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
19 class PtrSpecTest
: public CPPUNIT_NS::TestCase
21 CPPUNIT_TEST_SUITE(PtrSpecTest
);
22 CPPUNIT_TEST(ptr_specialization_test
);
23 CPPUNIT_TEST(function_pointer
);
24 CPPUNIT_TEST_SUITE_END();
27 /// this seems to be compile only test but...
28 void ptr_specialization_test();
29 void function_pointer();
33 bool operator () (_Tp
*__ptr
) const {
40 bool operator () (_Tp
*__first
, _Tp
*__second
) const {
41 return *__first
< *__second
;
46 CPPUNIT_TEST_SUITE_REGISTRATION(PtrSpecTest
);
48 #define TEST_INSTANCIATE_CONTAINER(cont) \
49 template class cont<int*>; \
50 template class cont<int const*>; \
51 template class cont<int volatile*>; \
52 template class cont<int const volatile*>
54 #if !defined(_MSC_VER) || (_MSC_VER > 1200) // excluding MSVC 6.0
55 TEST_INSTANCIATE_CONTAINER(vector
);
56 TEST_INSTANCIATE_CONTAINER(list
);
57 # if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
58 TEST_INSTANCIATE_CONTAINER(slist
);
60 TEST_INSTANCIATE_CONTAINER(deque
);
61 TEST_INSTANCIATE_CONTAINER(set
);
62 TEST_INSTANCIATE_CONTAINER(multiset
);
65 //Function to test pointer to function support:
66 void FTypeInstance() {}
68 //Class to test pointer to member method support:
75 // tests implementation
77 void PtrSpecTest::ptr_specialization_test()
79 int *int_array
[] = {0, 0, 0};
80 int const* cint_array
[] = {0, 0, 0};
83 vector
<void*> void_vect
;
84 deque
<void*> void_deque
;
85 list
<void*> void_list
;
86 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
87 slist
<void*> void_slist
;
92 typedef void (*FType
)();
93 vector
<FType
> func_vector
;
94 func_vector
.push_back(&FTypeInstance
);
97 #if !defined(__GNUC__) || (__GNUC__ > 2)
99 typedef void (AClass::*MFType
)();
100 vector
<MFType
> mem_func_vector
;
101 mem_func_vector
.push_back(&AClass::func
);
105 vector
<int*> pint_vect
;
106 vector
<int*> pint_vect2
;
107 vector
<int const*> pcint_vect
;
108 list
<int*> pint_list
;
109 list
<int*> pint_list2
;
110 list
<int const*> pcint_list
;
111 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
112 slist
<int*> pint_slist
;
113 slist
<int*> pint_slist2
;
114 slist
<int const*> pcint_slist
;
116 deque
<int*> pint_deque
;
117 deque
<int*> pint_deque2
;
118 deque
<int const*> pcint_deque
;
120 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
121 vector
<int*> pint_vect_from_list(pint_list
.begin(), pint_list
.end());
123 pint_vect
.insert(pint_vect
.end(), pint_vect2
.begin(), pint_vect2
.end());
124 pint_vect
.insert(pint_vect
.end(), int_array
, int_array
+ 3);
125 pint_vect2
.insert(pint_vect2
.end(), int_array
, int_array
+ 3);
126 pcint_vect
.insert(pcint_vect
.end(), int_array
, int_array
+ 3);
127 pcint_vect
.insert(pcint_vect
.end(), cint_array
, cint_array
+ 3);
128 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
129 pcint_vect
.insert(pcint_vect
.end(), pint_vect2
.begin(), pint_vect2
.end());
131 pcint_vect
.insert(pcint_vect
.end(), int_array
, int_array
+ 3);
132 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
133 pint_vect
.insert(pint_vect
.end(), pint_list
.begin(), pint_list
.end());
134 pcint_vect
.insert(pcint_vect
.end(), pint_list
.begin(), pint_list
.end());
135 pcint_vect
.insert(pcint_vect
.end(), pcint_list
.begin(), pcint_list
.end());
136 pint_vect
.assign(pint_list
.begin(), pint_list
.end());
137 pcint_vect
.assign(pint_list
.begin(), pint_list
.end());
139 pint_vect
.assign(int_array
, int_array
+ 3);
140 pcint_vect
.assign(int_array
, int_array
+ 3);
141 pcint_vect
.assign(cint_array
, cint_array
+ 3);
142 copy(int_array
, int_array
+ 3, back_inserter(pint_vect
));
144 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
145 pint_list
.sort(binary_pred
<int>());
146 pcint_list
.sort(binary_pred
<int const>());
147 pint_list
.unique(binary_pred
<int>());
148 pcint_list
.unique(binary_pred
<int const>());
149 pint_list
.merge(pint_list
, binary_pred
<int>());
150 pcint_list
.merge(pcint_list
, binary_pred
<int const>());
151 pint_list
.remove_if(unary_pred
<int>());
152 pcint_list
.remove_if(unary_pred
<int const>());
155 copy(int_array
, int_array
+ 3, back_inserter(pint_list
));
156 copy(int_array
, int_array
+ 3, back_inserter(pint_list2
));
157 pint_list
.insert(pint_list
.end(), pint_list2
.begin(), pint_list2
.end());
158 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
159 pcint_list
.insert(pcint_list
.end(), pint_list
.begin(), pint_list
.end());
161 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
162 pint_list
.insert(pint_list
.end(), pint_vect
.begin(), pint_vect
.end());
163 pcint_list
.insert(pcint_list
.end(), pint_vect
.begin(), pint_vect
.end());
164 pcint_list
.insert(pcint_list
.end(), pcint_vect
.begin(), pcint_vect
.end());
165 list
<int*> pint_list_from_vect(pint_vect
.begin(), pint_vect
.end());
166 pint_list
.assign(pint_vect
.begin(), pint_vect
.end());
167 pcint_list
.assign(pint_vect
.begin(), pint_vect
.end());
169 pint_list
.insert(pint_list
.begin(), int_array
, int_array
+ 3);
170 pint_list
.insert(pint_list
.end(), int_array
, int_array
+ 3);
171 pcint_list
.insert(pcint_list
.end(), int_array
, int_array
+ 3);
172 pcint_list
.insert(pcint_list
.end(), cint_array
, cint_array
+ 3);
173 pint_list
.assign(int_array
, int_array
+ 3);
174 pcint_list
.assign(int_array
, int_array
+ 3);
175 pcint_list
.assign(cint_array
, cint_array
+ 3);
176 //pint_list.assign(pcint_vect.begin(), pcint_vect.end());
178 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
179 copy(int_array
, int_array
+ 3, front_inserter(pint_slist
));
180 copy(int_array
, int_array
+ 3, front_inserter(pint_slist2
));
181 pint_slist
.insert(pint_slist
.end(), pint_slist2
.begin(), pint_slist2
.end());
182 # if defined (_STLP_MEMBER_TEMPLATES)
183 pcint_slist
.insert(pcint_slist
.end(), pint_slist
.begin(), pint_slist
.end());
185 # if !defined (_STLP_DEBUG) || defined (_STLP_MEMBER_TEMPLATES)
186 pint_slist
.insert(pint_slist
.end(), pint_vect
.begin(), pint_vect
.end());
187 pcint_slist
.insert(pcint_slist
.end(), pint_vect
.begin(), pint_vect
.end());
188 pcint_slist
.insert(pcint_slist
.end(), pcint_vect
.begin(), pcint_vect
.end());
189 slist
<int*> pint_slist_from_vect(pint_vect
.begin(), pint_vect
.end());
190 pint_slist
.assign(pint_vect
.begin(), pint_vect
.end());
191 pcint_slist
.assign(pint_vect
.begin(), pint_vect
.end());
193 pint_slist
.insert(pint_slist
.end(), int_array
, int_array
+ 3);
194 pcint_slist
.insert(pcint_slist
.end(), int_array
, int_array
+ 3);
195 pcint_slist
.insert(pcint_slist
.end(), cint_array
, cint_array
+ 3);
196 pint_slist
.assign(int_array
, int_array
+ 3);
197 pcint_slist
.assign(int_array
, int_array
+ 3);
198 pcint_slist
.assign(cint_array
, cint_array
+ 3);
199 //pint_slist.assign(pcint_vect.begin(), pcint_vect.end());
202 copy(int_array
, int_array
+ 3, back_inserter(pint_deque
));
203 copy(int_array
, int_array
+ 3, back_inserter(pint_deque2
));
204 pint_deque
.insert(pint_deque
.end(), pint_deque2
.begin(), pint_deque2
.end());
205 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
206 pcint_deque
.insert(pcint_deque
.end(), pint_deque
.begin(), pint_deque
.end());
208 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
209 pint_deque
.insert(pint_deque
.end(), pint_vect
.begin(), pint_vect
.end());
210 pcint_deque
.insert(pcint_deque
.end(), pint_vect
.begin(), pint_vect
.end());
211 pcint_deque
.insert(pcint_deque
.end(), pcint_vect
.begin(), pcint_vect
.end());
212 deque
<int*> pint_deque_from_vect(pint_vect
.begin(), pint_vect
.end());
213 pint_deque
.assign(pint_vect
.begin(), pint_vect
.end());
214 pcint_deque
.assign(pint_vect
.begin(), pint_vect
.end());
216 pint_deque
.insert(pint_deque
.end(), int_array
, int_array
+ 3);
217 pcint_deque
.insert(pcint_deque
.end(), int_array
, int_array
+ 3);
218 pcint_deque
.insert(pcint_deque
.end(), cint_array
, cint_array
+ 3);
219 pint_deque
.assign(int_array
, int_array
+ 3);
220 pcint_deque
.assign(int_array
, int_array
+ 3);
221 pcint_deque
.assign(cint_array
, cint_array
+ 3);
224 typedef void (*Func
)(int);
227 void PtrSpecTest::function_pointer()
231 CPPUNIT_ASSERT( !fs
.empty() );