#include <vector> #include <list> #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) # include <slist> #endif #include <deque> #include <set> #include <iterator> #include "cppunit/cppunit_proxy.h" #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) using namespace std; #endif // // TestCase class // class PtrSpecTest : public CPPUNIT_NS::TestCase { CPPUNIT_TEST_SUITE(PtrSpecTest); CPPUNIT_TEST(ptr_specialization_test); CPPUNIT_TEST(function_pointer); CPPUNIT_TEST_SUITE_END(); protected: /// this seems to be compile only test but... void ptr_specialization_test(); void function_pointer(); template <class _Tp> struct unary_pred { bool operator () (_Tp *__ptr) const { return *__ptr == 0; } }; template <class _Tp> struct binary_pred { bool operator () (_Tp *__first, _Tp *__second) const { return *__first < *__second; } }; }; CPPUNIT_TEST_SUITE_REGISTRATION(PtrSpecTest); #define TEST_INSTANCIATE_CONTAINER(cont) \ template class cont<int*>; \ template class cont<int const*>; \ template class cont<int volatile*>; \ template class cont<int const volatile*> #if !defined(_MSC_VER) || (_MSC_VER > 1200) // excluding MSVC 6.0 TEST_INSTANCIATE_CONTAINER(vector); TEST_INSTANCIATE_CONTAINER(list); # if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) TEST_INSTANCIATE_CONTAINER(slist); # endif TEST_INSTANCIATE_CONTAINER(deque); TEST_INSTANCIATE_CONTAINER(set); TEST_INSTANCIATE_CONTAINER(multiset); #endif //Function to test pointer to function support: void FTypeInstance() {} //Class to test pointer to member method support: class AClass { public: void func() {} }; // // tests implementation // void PtrSpecTest::ptr_specialization_test() { int *int_array[] = {0, 0, 0}; int const* cint_array[] = {0, 0, 0}; { vector<void*> void_vect; deque<void*> void_deque; list<void*> void_list; #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) slist<void*> void_slist; #endif } { typedef void (*FType)(); vector<FType> func_vector; func_vector.push_back(&FTypeInstance); } #if !defined(__GNUC__) || (__GNUC__ > 2) { typedef void (AClass::*MFType)(); vector<MFType> mem_func_vector; mem_func_vector.push_back(&AClass::func); } #endif vector<int*> pint_vect; vector<int*> pint_vect2; vector<int const*> pcint_vect; list<int*> pint_list; list<int*> pint_list2; list<int const*> pcint_list; #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) slist<int*> pint_slist; slist<int*> pint_slist2; slist<int const*> pcint_slist; #endif deque<int*> pint_deque; deque<int*> pint_deque2; deque<int const*> pcint_deque; #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) vector<int*> pint_vect_from_list(pint_list.begin(), pint_list.end()); #endif pint_vect.insert(pint_vect.end(), pint_vect2.begin(), pint_vect2.end()); pint_vect.insert(pint_vect.end(), int_array, int_array + 3); pint_vect2.insert(pint_vect2.end(), int_array, int_array + 3); pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3); pcint_vect.insert(pcint_vect.end(), cint_array, cint_array + 3); #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES) pcint_vect.insert(pcint_vect.end(), pint_vect2.begin(), pint_vect2.end()); #endif pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3); #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) pint_vect.insert(pint_vect.end(), pint_list.begin(), pint_list.end()); pcint_vect.insert(pcint_vect.end(), pint_list.begin(), pint_list.end()); pcint_vect.insert(pcint_vect.end(), pcint_list.begin(), pcint_list.end()); pint_vect.assign(pint_list.begin(), pint_list.end()); pcint_vect.assign(pint_list.begin(), pint_list.end()); #endif pint_vect.assign(int_array, int_array + 3); pcint_vect.assign(int_array, int_array + 3); pcint_vect.assign(cint_array, cint_array + 3); copy(int_array, int_array + 3, back_inserter(pint_vect)); #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) pint_list.sort(binary_pred<int>()); pcint_list.sort(binary_pred<int const>()); pint_list.unique(binary_pred<int>()); pcint_list.unique(binary_pred<int const>()); pint_list.merge(pint_list, binary_pred<int>()); pcint_list.merge(pcint_list, binary_pred<int const>()); pint_list.remove_if(unary_pred<int>()); pcint_list.remove_if(unary_pred<int const>()); #endif copy(int_array, int_array + 3, back_inserter(pint_list)); copy(int_array, int_array + 3, back_inserter(pint_list2)); pint_list.insert(pint_list.end(), pint_list2.begin(), pint_list2.end()); #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) pcint_list.insert(pcint_list.end(), pint_list.begin(), pint_list.end()); #endif #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES) pint_list.insert(pint_list.end(), pint_vect.begin(), pint_vect.end()); pcint_list.insert(pcint_list.end(), pint_vect.begin(), pint_vect.end()); pcint_list.insert(pcint_list.end(), pcint_vect.begin(), pcint_vect.end()); list<int*> pint_list_from_vect(pint_vect.begin(), pint_vect.end()); pint_list.assign(pint_vect.begin(), pint_vect.end()); pcint_list.assign(pint_vect.begin(), pint_vect.end()); #endif pint_list.insert(pint_list.begin(), int_array, int_array + 3); pint_list.insert(pint_list.end(), int_array, int_array + 3); pcint_list.insert(pcint_list.end(), int_array, int_array + 3); pcint_list.insert(pcint_list.end(), cint_array, cint_array + 3); pint_list.assign(int_array, int_array + 3); pcint_list.assign(int_array, int_array + 3); pcint_list.assign(cint_array, cint_array + 3); //pint_list.assign(pcint_vect.begin(), pcint_vect.end()); #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) copy(int_array, int_array + 3, front_inserter(pint_slist)); copy(int_array, int_array + 3, front_inserter(pint_slist2)); pint_slist.insert(pint_slist.end(), pint_slist2.begin(), pint_slist2.end()); # if defined (_STLP_MEMBER_TEMPLATES) pcint_slist.insert(pcint_slist.end(), pint_slist.begin(), pint_slist.end()); # endif # if !defined (_STLP_DEBUG) || defined (_STLP_MEMBER_TEMPLATES) pint_slist.insert(pint_slist.end(), pint_vect.begin(), pint_vect.end()); pcint_slist.insert(pcint_slist.end(), pint_vect.begin(), pint_vect.end()); pcint_slist.insert(pcint_slist.end(), pcint_vect.begin(), pcint_vect.end()); slist<int*> pint_slist_from_vect(pint_vect.begin(), pint_vect.end()); pint_slist.assign(pint_vect.begin(), pint_vect.end()); pcint_slist.assign(pint_vect.begin(), pint_vect.end()); # endif pint_slist.insert(pint_slist.end(), int_array, int_array + 3); pcint_slist.insert(pcint_slist.end(), int_array, int_array + 3); pcint_slist.insert(pcint_slist.end(), cint_array, cint_array + 3); pint_slist.assign(int_array, int_array + 3); pcint_slist.assign(int_array, int_array + 3); pcint_slist.assign(cint_array, cint_array + 3); //pint_slist.assign(pcint_vect.begin(), pcint_vect.end()); #endif copy(int_array, int_array + 3, back_inserter(pint_deque)); copy(int_array, int_array + 3, back_inserter(pint_deque2)); pint_deque.insert(pint_deque.end(), pint_deque2.begin(), pint_deque2.end()); #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES) pcint_deque.insert(pcint_deque.end(), pint_deque.begin(), pint_deque.end()); #endif #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES) pint_deque.insert(pint_deque.end(), pint_vect.begin(), pint_vect.end()); pcint_deque.insert(pcint_deque.end(), pint_vect.begin(), pint_vect.end()); pcint_deque.insert(pcint_deque.end(), pcint_vect.begin(), pcint_vect.end()); deque<int*> pint_deque_from_vect(pint_vect.begin(), pint_vect.end()); pint_deque.assign(pint_vect.begin(), pint_vect.end()); pcint_deque.assign(pint_vect.begin(), pint_vect.end()); #endif pint_deque.insert(pint_deque.end(), int_array, int_array + 3); pcint_deque.insert(pcint_deque.end(), int_array, int_array + 3); pcint_deque.insert(pcint_deque.end(), cint_array, cint_array + 3); pint_deque.assign(int_array, int_array + 3); pcint_deque.assign(int_array, int_array + 3); pcint_deque.assign(cint_array, cint_array + 3); } typedef void (*Func)(int); void f1(int) {} void PtrSpecTest::function_pointer() { vector<Func> fs; fs.push_back(&f1); CPPUNIT_ASSERT( !fs.empty() ); }