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