diff -r e20de85af2ee -r ce057bb09d0b genericopenlibs/cppstdlib/stl/test/unit/ptrspec_test.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cppstdlib/stl/test/unit/ptrspec_test.cpp Fri Jun 04 16:20:51 2010 +0100 @@ -0,0 +1,241 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include +#include +#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) +# include +#endif +#include +#include +#include + +#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); +#if (defined (__DMC__) && defined (_STLP_DEBUG)) + CPPUNIT_IGNORE; +#endif + CPPUNIT_TEST(ptr_specialization_test); + CPPUNIT_TEST_SUITE_END(); + +protected: + // this seems to be compile only test but... + void ptr_specialization_test(); + + template + struct unary_pred { + bool operator () (_Tp *__ptr) const { + return *__ptr == 0; + } + }; + + template + 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; \ + template class cont; \ + template class cont; \ + template class cont + +#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() +{ +# if !(defined (__DMC__) && defined (_STLP_DEBUG)) + int *int_array[] = {0, 0, 0}; + int const* cint_array[] = {0, 0, 0}; + + { + vector void_vect; + deque void_deque; + list void_list; +#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) + slist void_slist; +#endif + } + + { + typedef void (*FType)(); + vector func_vector; + func_vector.push_back(&FTypeInstance); + } + +#if !defined(__GNUC__) || (__GNUC__ > 2) + { + typedef void (AClass::*MFType)(); + vector mem_func_vector; + mem_func_vector.push_back(&AClass::func); + } +#endif + + vector pint_vect; + vector pint_vect2; + vector pcint_vect; + list pint_list; + list pint_list2; + list pcint_list; +#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS) + slist pint_slist; + slist pint_slist2; + slist pcint_slist; +#endif + deque pint_deque; + deque pint_deque2; + deque pcint_deque; + +#ifdef _STLP_MEMBER_TEMPLATES + vector 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(_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); +#ifdef _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)); + +#ifdef _STLP_MEMBER_TEMPLATES + pint_list.sort(binary_pred()); + pcint_list.sort(binary_pred()); + pint_list.unique(binary_pred()); + pcint_list.unique(binary_pred()); + pint_list.merge(pint_list, binary_pred()); + pcint_list.merge(pcint_list, binary_pred()); + pint_list.remove_if(unary_pred()); + pcint_list.remove_if(unary_pred()); +#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()); +#ifdef _STLP_MEMBER_TEMPLATES + pcint_list.insert(pcint_list.end(), pint_list.begin(), pint_list.end()); +#endif +#if !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 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 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()); +#ifdef _STLP_MEMBER_TEMPLATES + pcint_deque.insert(pcint_deque.end(), pint_deque.begin(), pint_deque.end()); +#endif +#if !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 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); +# endif /* __DMC__ */ +}