genericopenlibs/cppstdlib/stl/test/unit/ptrspec_test.cpp
changeset 31 ce057bb09d0b
child 34 5fae379060a7
--- /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__ */
+}