--- /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 <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);
+#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 <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()
+{
+# if !(defined (__DMC__) && defined (_STLP_DEBUG))
+ 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;
+
+#ifdef _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(_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<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());
+#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<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());
+#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<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);
+# endif /* __DMC__ */
+}