Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenptrspec_test.cpp
Go to the documentation of this file.
00001 #include <vector> 00002 #include <list> 00003 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 00004 # include <slist> 00005 #endif 00006 #include <deque> 00007 #include <set> 00008 #include <iterator> 00009 00010 #include "cppunit/cppunit_proxy.h" 00011 00012 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 00013 using namespace std; 00014 #endif 00015 00016 // 00017 // TestCase class 00018 // 00019 class PtrSpecTest : public CPPUNIT_NS::TestCase 00020 { 00021 CPPUNIT_TEST_SUITE(PtrSpecTest); 00022 CPPUNIT_TEST(ptr_specialization_test); 00023 CPPUNIT_TEST(function_pointer); 00024 CPPUNIT_TEST_SUITE_END(); 00025 00026 protected: 00028 void ptr_specialization_test(); 00029 void function_pointer(); 00030 00031 template <class _Tp> 00032 struct unary_pred { 00033 bool operator () (_Tp *__ptr) const { 00034 return *__ptr == 0; 00035 } 00036 }; 00037 00038 template <class _Tp> 00039 struct binary_pred { 00040 bool operator () (_Tp *__first, _Tp *__second) const { 00041 return *__first < *__second; 00042 } 00043 }; 00044 }; 00045 00046 CPPUNIT_TEST_SUITE_REGISTRATION(PtrSpecTest); 00047 00048 #define TEST_INSTANCIATE_CONTAINER(cont) \ 00049 template class cont<int*>; \ 00050 template class cont<int const*>; \ 00051 template class cont<int volatile*>; \ 00052 template class cont<int const volatile*> 00053 00054 #if !defined(_MSC_VER) || (_MSC_VER > 1200) // excluding MSVC 6.0 00055 TEST_INSTANCIATE_CONTAINER(vector); 00056 TEST_INSTANCIATE_CONTAINER(list); 00057 # if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 00058 TEST_INSTANCIATE_CONTAINER(slist); 00059 # endif 00060 TEST_INSTANCIATE_CONTAINER(deque); 00061 TEST_INSTANCIATE_CONTAINER(set); 00062 TEST_INSTANCIATE_CONTAINER(multiset); 00063 #endif 00064 00065 //Function to test pointer to function support: 00066 void FTypeInstance() {} 00067 00068 //Class to test pointer to member method support: 00069 class AClass { 00070 public: 00071 void func() {} 00072 }; 00073 00074 // 00075 // tests implementation 00076 // 00077 void PtrSpecTest::ptr_specialization_test() 00078 { 00079 int *int_array[] = {0, 0, 0}; 00080 int const* cint_array[] = {0, 0, 0}; 00081 00082 { 00083 vector<void*> void_vect; 00084 deque<void*> void_deque; 00085 list<void*> void_list; 00086 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 00087 slist<void*> void_slist; 00088 #endif 00089 } 00090 00091 { 00092 typedef void (*FType)(); 00093 vector<FType> func_vector; 00094 func_vector.push_back(&FTypeInstance); 00095 } 00096 00097 #if !defined(__GNUC__) || (__GNUC__ > 2) 00098 { 00099 typedef void (AClass::*MFType)(); 00100 vector<MFType> mem_func_vector; 00101 mem_func_vector.push_back(&AClass::func); 00102 } 00103 #endif 00104 00105 vector<int*> pint_vect; 00106 vector<int*> pint_vect2; 00107 vector<int const*> pcint_vect; 00108 list<int*> pint_list; 00109 list<int*> pint_list2; 00110 list<int const*> pcint_list; 00111 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 00112 slist<int*> pint_slist; 00113 slist<int*> pint_slist2; 00114 slist<int const*> pcint_slist; 00115 #endif 00116 deque<int*> pint_deque; 00117 deque<int*> pint_deque2; 00118 deque<int const*> pcint_deque; 00119 00120 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) 00121 vector<int*> pint_vect_from_list(pint_list.begin(), pint_list.end()); 00122 #endif 00123 pint_vect.insert(pint_vect.end(), pint_vect2.begin(), pint_vect2.end()); 00124 pint_vect.insert(pint_vect.end(), int_array, int_array + 3); 00125 pint_vect2.insert(pint_vect2.end(), int_array, int_array + 3); 00126 pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3); 00127 pcint_vect.insert(pcint_vect.end(), cint_array, cint_array + 3); 00128 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES) 00129 pcint_vect.insert(pcint_vect.end(), pint_vect2.begin(), pint_vect2.end()); 00130 #endif 00131 pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3); 00132 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) 00133 pint_vect.insert(pint_vect.end(), pint_list.begin(), pint_list.end()); 00134 pcint_vect.insert(pcint_vect.end(), pint_list.begin(), pint_list.end()); 00135 pcint_vect.insert(pcint_vect.end(), pcint_list.begin(), pcint_list.end()); 00136 pint_vect.assign(pint_list.begin(), pint_list.end()); 00137 pcint_vect.assign(pint_list.begin(), pint_list.end()); 00138 #endif 00139 pint_vect.assign(int_array, int_array + 3); 00140 pcint_vect.assign(int_array, int_array + 3); 00141 pcint_vect.assign(cint_array, cint_array + 3); 00142 copy(int_array, int_array + 3, back_inserter(pint_vect)); 00143 00144 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) 00145 pint_list.sort(binary_pred<int>()); 00146 pcint_list.sort(binary_pred<int const>()); 00147 pint_list.unique(binary_pred<int>()); 00148 pcint_list.unique(binary_pred<int const>()); 00149 pint_list.merge(pint_list, binary_pred<int>()); 00150 pcint_list.merge(pcint_list, binary_pred<int const>()); 00151 pint_list.remove_if(unary_pred<int>()); 00152 pcint_list.remove_if(unary_pred<int const>()); 00153 #endif 00154 00155 copy(int_array, int_array + 3, back_inserter(pint_list)); 00156 copy(int_array, int_array + 3, back_inserter(pint_list2)); 00157 pint_list.insert(pint_list.end(), pint_list2.begin(), pint_list2.end()); 00158 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) 00159 pcint_list.insert(pcint_list.end(), pint_list.begin(), pint_list.end()); 00160 #endif 00161 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES) 00162 pint_list.insert(pint_list.end(), pint_vect.begin(), pint_vect.end()); 00163 pcint_list.insert(pcint_list.end(), pint_vect.begin(), pint_vect.end()); 00164 pcint_list.insert(pcint_list.end(), pcint_vect.begin(), pcint_vect.end()); 00165 list<int*> pint_list_from_vect(pint_vect.begin(), pint_vect.end()); 00166 pint_list.assign(pint_vect.begin(), pint_vect.end()); 00167 pcint_list.assign(pint_vect.begin(), pint_vect.end()); 00168 #endif 00169 pint_list.insert(pint_list.begin(), int_array, int_array + 3); 00170 pint_list.insert(pint_list.end(), int_array, int_array + 3); 00171 pcint_list.insert(pcint_list.end(), int_array, int_array + 3); 00172 pcint_list.insert(pcint_list.end(), cint_array, cint_array + 3); 00173 pint_list.assign(int_array, int_array + 3); 00174 pcint_list.assign(int_array, int_array + 3); 00175 pcint_list.assign(cint_array, cint_array + 3); 00176 //pint_list.assign(pcint_vect.begin(), pcint_vect.end()); 00177 00178 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) 00179 copy(int_array, int_array + 3, front_inserter(pint_slist)); 00180 copy(int_array, int_array + 3, front_inserter(pint_slist2)); 00181 pint_slist.insert(pint_slist.end(), pint_slist2.begin(), pint_slist2.end()); 00182 # if defined (_STLP_MEMBER_TEMPLATES) 00183 pcint_slist.insert(pcint_slist.end(), pint_slist.begin(), pint_slist.end()); 00184 # endif 00185 # if !defined (_STLP_DEBUG) || defined (_STLP_MEMBER_TEMPLATES) 00186 pint_slist.insert(pint_slist.end(), pint_vect.begin(), pint_vect.end()); 00187 pcint_slist.insert(pcint_slist.end(), pint_vect.begin(), pint_vect.end()); 00188 pcint_slist.insert(pcint_slist.end(), pcint_vect.begin(), pcint_vect.end()); 00189 slist<int*> pint_slist_from_vect(pint_vect.begin(), pint_vect.end()); 00190 pint_slist.assign(pint_vect.begin(), pint_vect.end()); 00191 pcint_slist.assign(pint_vect.begin(), pint_vect.end()); 00192 # endif 00193 pint_slist.insert(pint_slist.end(), int_array, int_array + 3); 00194 pcint_slist.insert(pcint_slist.end(), int_array, int_array + 3); 00195 pcint_slist.insert(pcint_slist.end(), cint_array, cint_array + 3); 00196 pint_slist.assign(int_array, int_array + 3); 00197 pcint_slist.assign(int_array, int_array + 3); 00198 pcint_slist.assign(cint_array, cint_array + 3); 00199 //pint_slist.assign(pcint_vect.begin(), pcint_vect.end()); 00200 #endif 00201 00202 copy(int_array, int_array + 3, back_inserter(pint_deque)); 00203 copy(int_array, int_array + 3, back_inserter(pint_deque2)); 00204 pint_deque.insert(pint_deque.end(), pint_deque2.begin(), pint_deque2.end()); 00205 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) 00206 pcint_deque.insert(pcint_deque.end(), pint_deque.begin(), pint_deque.end()); 00207 #endif 00208 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES) 00209 pint_deque.insert(pint_deque.end(), pint_vect.begin(), pint_vect.end()); 00210 pcint_deque.insert(pcint_deque.end(), pint_vect.begin(), pint_vect.end()); 00211 pcint_deque.insert(pcint_deque.end(), pcint_vect.begin(), pcint_vect.end()); 00212 deque<int*> pint_deque_from_vect(pint_vect.begin(), pint_vect.end()); 00213 pint_deque.assign(pint_vect.begin(), pint_vect.end()); 00214 pcint_deque.assign(pint_vect.begin(), pint_vect.end()); 00215 #endif 00216 pint_deque.insert(pint_deque.end(), int_array, int_array + 3); 00217 pcint_deque.insert(pcint_deque.end(), int_array, int_array + 3); 00218 pcint_deque.insert(pcint_deque.end(), cint_array, cint_array + 3); 00219 pint_deque.assign(int_array, int_array + 3); 00220 pcint_deque.assign(int_array, int_array + 3); 00221 pcint_deque.assign(cint_array, cint_array + 3); 00222 } 00223 00224 typedef void (*Func)(int); 00225 void f1(int) {} 00226 00227 void PtrSpecTest::function_pointer() 00228 { 00229 vector<Func> fs; 00230 fs.push_back(&f1); 00231 CPPUNIT_ASSERT( !fs.empty() ); 00232 } Generated on Fri May 25 2012 04:34:11 for ReactOS by
1.7.6.1
|