genericopenlibs/cppstdlib/stl/test/unit/ptrspec_test.cpp
changeset 31 ce057bb09d0b
child 34 5fae379060a7
equal deleted inserted replaced
30:e20de85af2ee 31:ce057bb09d0b
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 *
       
    16 */
       
    17 #include <vector>
       
    18 #include <list>
       
    19 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
       
    20 #  include <slist>
       
    21 #endif
       
    22 #include <deque>
       
    23 #include <set>
       
    24 #include <iterator>
       
    25 
       
    26 #include "cppunit/cppunit_proxy.h"
       
    27 
       
    28 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
       
    29 using namespace std;
       
    30 #endif
       
    31 
       
    32 //
       
    33 // TestCase class
       
    34 //
       
    35 class PtrSpecTest : public CPPUNIT_NS::TestCase
       
    36 {
       
    37   CPPUNIT_TEST_SUITE(PtrSpecTest);
       
    38 #if (defined (__DMC__) && defined (_STLP_DEBUG))
       
    39   CPPUNIT_IGNORE;
       
    40 #endif
       
    41   CPPUNIT_TEST(ptr_specialization_test);
       
    42   CPPUNIT_TEST_SUITE_END();
       
    43 
       
    44 protected:
       
    45   // this seems to be compile only test but...
       
    46   void ptr_specialization_test();
       
    47 
       
    48   template <class _Tp>
       
    49   struct unary_pred {
       
    50     bool operator () (_Tp *__ptr) const {
       
    51      return *__ptr == 0;
       
    52     }
       
    53   };
       
    54 
       
    55   template <class _Tp>
       
    56   struct binary_pred {
       
    57     bool operator () (_Tp *__first, _Tp *__second) const {
       
    58       return *__first < *__second;
       
    59     }
       
    60   };
       
    61 };
       
    62 
       
    63 CPPUNIT_TEST_SUITE_REGISTRATION(PtrSpecTest);
       
    64 
       
    65 #define TEST_INSTANCIATE_CONTAINER(cont) \
       
    66   template class cont<int*>; \
       
    67   template class cont<int const*>; \
       
    68   template class cont<int volatile*>; \
       
    69   template class cont<int const volatile*>
       
    70 
       
    71 #if !defined(_MSC_VER) || (_MSC_VER > 1200)  // excluding MSVC 6.0
       
    72 TEST_INSTANCIATE_CONTAINER(vector);
       
    73 TEST_INSTANCIATE_CONTAINER(list);
       
    74 #  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
       
    75 TEST_INSTANCIATE_CONTAINER(slist);
       
    76 #  endif
       
    77 TEST_INSTANCIATE_CONTAINER(deque);
       
    78 TEST_INSTANCIATE_CONTAINER(set);
       
    79 TEST_INSTANCIATE_CONTAINER(multiset);
       
    80 #endif
       
    81 
       
    82 //Function to test pointer to function support:
       
    83 void FTypeInstance() {}
       
    84 
       
    85 //Class to test pointer to member method support:
       
    86 class AClass {
       
    87 public:
       
    88   void func() {}
       
    89 };
       
    90 
       
    91 //
       
    92 // tests implementation
       
    93 //
       
    94 void PtrSpecTest::ptr_specialization_test()
       
    95 {
       
    96 #  if !(defined (__DMC__) && defined (_STLP_DEBUG))
       
    97   int *int_array[] = {0, 0, 0};
       
    98   int const* cint_array[] = {0, 0, 0};
       
    99 
       
   100   {
       
   101     vector<void*> void_vect;
       
   102     deque<void*> void_deque;
       
   103     list<void*> void_list;
       
   104 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
       
   105     slist<void*> void_slist;
       
   106 #endif
       
   107   }
       
   108 
       
   109   {
       
   110     typedef void (*FType)();
       
   111     vector<FType> func_vector;
       
   112     func_vector.push_back(&FTypeInstance);
       
   113   }
       
   114 
       
   115 #if !defined(__GNUC__) || (__GNUC__ > 2)
       
   116   {
       
   117     typedef void (AClass::*MFType)();
       
   118     vector<MFType> mem_func_vector;
       
   119     mem_func_vector.push_back(&AClass::func);
       
   120   }
       
   121 #endif
       
   122 
       
   123   vector<int*> pint_vect;
       
   124   vector<int*> pint_vect2;
       
   125   vector<int const*> pcint_vect;
       
   126   list<int*> pint_list;
       
   127   list<int*> pint_list2;
       
   128   list<int const*> pcint_list;
       
   129 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
       
   130   slist<int*> pint_slist;
       
   131   slist<int*> pint_slist2;
       
   132   slist<int const*> pcint_slist;
       
   133 #endif
       
   134   deque<int*> pint_deque;
       
   135   deque<int*> pint_deque2;
       
   136   deque<int const*> pcint_deque;
       
   137 
       
   138 #ifdef _STLP_MEMBER_TEMPLATES
       
   139   vector<int*> pint_vect_from_list(pint_list.begin(), pint_list.end());
       
   140 #endif
       
   141   pint_vect.insert(pint_vect.end(), pint_vect2.begin(), pint_vect2.end());
       
   142   pint_vect.insert(pint_vect.end(), int_array, int_array + 3);
       
   143   pint_vect2.insert(pint_vect2.end(), int_array, int_array + 3);
       
   144   pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3);
       
   145   pcint_vect.insert(pcint_vect.end(), cint_array, cint_array + 3);
       
   146 #if !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
       
   147   pcint_vect.insert(pcint_vect.end(), pint_vect2.begin(), pint_vect2.end());
       
   148 #endif
       
   149   pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3);
       
   150 #ifdef _STLP_MEMBER_TEMPLATES
       
   151   pint_vect.insert(pint_vect.end(), pint_list.begin(), pint_list.end());
       
   152   pcint_vect.insert(pcint_vect.end(), pint_list.begin(), pint_list.end());
       
   153   pcint_vect.insert(pcint_vect.end(), pcint_list.begin(), pcint_list.end());
       
   154   pint_vect.assign(pint_list.begin(), pint_list.end());
       
   155   pcint_vect.assign(pint_list.begin(), pint_list.end());
       
   156 #endif
       
   157   pint_vect.assign(int_array, int_array + 3);
       
   158   pcint_vect.assign(int_array, int_array + 3);
       
   159   pcint_vect.assign(cint_array, cint_array + 3);
       
   160   copy(int_array, int_array + 3, back_inserter(pint_vect));
       
   161 
       
   162 #ifdef _STLP_MEMBER_TEMPLATES
       
   163   pint_list.sort(binary_pred<int>());
       
   164   pcint_list.sort(binary_pred<int const>());
       
   165   pint_list.unique(binary_pred<int>());
       
   166   pcint_list.unique(binary_pred<int const>());
       
   167   pint_list.merge(pint_list, binary_pred<int>());
       
   168   pcint_list.merge(pcint_list, binary_pred<int const>());
       
   169   pint_list.remove_if(unary_pred<int>());
       
   170   pcint_list.remove_if(unary_pred<int const>());
       
   171 #endif
       
   172 
       
   173   copy(int_array, int_array + 3, back_inserter(pint_list));
       
   174   copy(int_array, int_array + 3, back_inserter(pint_list2));
       
   175   pint_list.insert(pint_list.end(), pint_list2.begin(), pint_list2.end());
       
   176 #ifdef _STLP_MEMBER_TEMPLATES
       
   177   pcint_list.insert(pcint_list.end(), pint_list.begin(), pint_list.end());
       
   178 #endif
       
   179 #if !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
       
   180   pint_list.insert(pint_list.end(), pint_vect.begin(), pint_vect.end());
       
   181   pcint_list.insert(pcint_list.end(), pint_vect.begin(), pint_vect.end());
       
   182   pcint_list.insert(pcint_list.end(), pcint_vect.begin(), pcint_vect.end());
       
   183   list<int*> pint_list_from_vect(pint_vect.begin(), pint_vect.end());
       
   184   pint_list.assign(pint_vect.begin(), pint_vect.end());
       
   185   pcint_list.assign(pint_vect.begin(), pint_vect.end());
       
   186 #endif
       
   187   pint_list.insert(pint_list.begin(), int_array, int_array + 3);
       
   188   pint_list.insert(pint_list.end(), int_array, int_array + 3);
       
   189   pcint_list.insert(pcint_list.end(), int_array, int_array + 3);
       
   190   pcint_list.insert(pcint_list.end(), cint_array, cint_array + 3);
       
   191   pint_list.assign(int_array, int_array + 3);
       
   192   pcint_list.assign(int_array, int_array + 3);
       
   193   pcint_list.assign(cint_array, cint_array + 3);
       
   194   //pint_list.assign(pcint_vect.begin(), pcint_vect.end());
       
   195 
       
   196 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
       
   197   copy(int_array, int_array + 3, front_inserter(pint_slist));
       
   198   copy(int_array, int_array + 3, front_inserter(pint_slist2));
       
   199   pint_slist.insert(pint_slist.end(), pint_slist2.begin(), pint_slist2.end());
       
   200 #  if defined (_STLP_MEMBER_TEMPLATES)
       
   201   pcint_slist.insert(pcint_slist.end(), pint_slist.begin(), pint_slist.end());
       
   202 #  endif
       
   203 #  if !defined (_STLP_DEBUG) || defined (_STLP_MEMBER_TEMPLATES)
       
   204   pint_slist.insert(pint_slist.end(), pint_vect.begin(), pint_vect.end());
       
   205   pcint_slist.insert(pcint_slist.end(), pint_vect.begin(), pint_vect.end());
       
   206   pcint_slist.insert(pcint_slist.end(), pcint_vect.begin(), pcint_vect.end());
       
   207   slist<int*> pint_slist_from_vect(pint_vect.begin(), pint_vect.end());
       
   208   pint_slist.assign(pint_vect.begin(), pint_vect.end());
       
   209   pcint_slist.assign(pint_vect.begin(), pint_vect.end());
       
   210 #  endif
       
   211   pint_slist.insert(pint_slist.end(), int_array, int_array + 3);
       
   212   pcint_slist.insert(pcint_slist.end(), int_array, int_array + 3);
       
   213   pcint_slist.insert(pcint_slist.end(), cint_array, cint_array + 3);
       
   214   pint_slist.assign(int_array, int_array + 3);
       
   215   pcint_slist.assign(int_array, int_array + 3);
       
   216   pcint_slist.assign(cint_array, cint_array + 3);
       
   217   //pint_slist.assign(pcint_vect.begin(), pcint_vect.end());
       
   218 #endif
       
   219 
       
   220   copy(int_array, int_array + 3, back_inserter(pint_deque));
       
   221   copy(int_array, int_array + 3, back_inserter(pint_deque2));
       
   222   pint_deque.insert(pint_deque.end(), pint_deque2.begin(), pint_deque2.end());
       
   223 #ifdef _STLP_MEMBER_TEMPLATES
       
   224   pcint_deque.insert(pcint_deque.end(), pint_deque.begin(), pint_deque.end());
       
   225 #endif
       
   226 #if !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
       
   227   pint_deque.insert(pint_deque.end(), pint_vect.begin(), pint_vect.end());
       
   228   pcint_deque.insert(pcint_deque.end(), pint_vect.begin(), pint_vect.end());
       
   229   pcint_deque.insert(pcint_deque.end(), pcint_vect.begin(), pcint_vect.end());
       
   230   deque<int*> pint_deque_from_vect(pint_vect.begin(), pint_vect.end());
       
   231   pint_deque.assign(pint_vect.begin(), pint_vect.end());
       
   232   pcint_deque.assign(pint_vect.begin(), pint_vect.end());
       
   233 #endif
       
   234   pint_deque.insert(pint_deque.end(), int_array, int_array + 3);
       
   235   pcint_deque.insert(pcint_deque.end(), int_array, int_array + 3);
       
   236   pcint_deque.insert(pcint_deque.end(), cint_array, cint_array + 3);
       
   237   pint_deque.assign(int_array, int_array + 3);
       
   238   pcint_deque.assign(int_array, int_array + 3);
       
   239   pcint_deque.assign(cint_array, cint_array + 3);
       
   240 #  endif /* __DMC__ */
       
   241 }