ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ptrspec_test.cpp
Go to the documentation of this file.
00001 #include <vector>
00002 #include <list>
00003 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
00004 #  include <slist>
00005 #endif
00006 #include <deque>
00007 #include <set>
00008 #include <iterator>
00009 
00010 #include "cppunit/cppunit_proxy.h"
00011 
00012 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
00013 using namespace std;
00014 #endif
00015 
00016 //
00017 // TestCase class
00018 //
00019 class PtrSpecTest : public CPPUNIT_NS::TestCase
00020 {
00021   CPPUNIT_TEST_SUITE(PtrSpecTest);
00022   CPPUNIT_TEST(ptr_specialization_test);
00023   CPPUNIT_TEST(function_pointer);
00024   CPPUNIT_TEST_SUITE_END();
00025 
00026 protected:
00028   void ptr_specialization_test();
00029   void function_pointer();
00030 
00031   template <class _Tp>
00032   struct unary_pred {
00033     bool operator () (_Tp *__ptr) const {
00034      return *__ptr == 0;
00035     }
00036   };
00037 
00038   template <class _Tp>
00039   struct binary_pred {
00040     bool operator () (_Tp *__first, _Tp *__second) const {
00041       return *__first < *__second;
00042     }
00043   };
00044 };
00045 
00046 CPPUNIT_TEST_SUITE_REGISTRATION(PtrSpecTest);
00047 
00048 #define TEST_INSTANCIATE_CONTAINER(cont) \
00049   template class cont<int*>; \
00050   template class cont<int const*>; \
00051   template class cont<int volatile*>; \
00052   template class cont<int const volatile*>
00053 
00054 #if !defined(_MSC_VER) || (_MSC_VER > 1200)  // excluding MSVC 6.0
00055 TEST_INSTANCIATE_CONTAINER(vector);
00056 TEST_INSTANCIATE_CONTAINER(list);
00057 #  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
00058 TEST_INSTANCIATE_CONTAINER(slist);
00059 #  endif
00060 TEST_INSTANCIATE_CONTAINER(deque);
00061 TEST_INSTANCIATE_CONTAINER(set);
00062 TEST_INSTANCIATE_CONTAINER(multiset);
00063 #endif
00064 
00065 //Function to test pointer to function support:
00066 void FTypeInstance() {}
00067 
00068 //Class to test pointer to member method support:
00069 class AClass {
00070 public:
00071   void func() {}
00072 };
00073 
00074 //
00075 // tests implementation
00076 //
00077 void PtrSpecTest::ptr_specialization_test()
00078 {
00079   int *int_array[] = {0, 0, 0};
00080   int const* cint_array[] = {0, 0, 0};
00081 
00082   {
00083     vector<void*> void_vect;
00084     deque<void*> void_deque;
00085     list<void*> void_list;
00086 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
00087     slist<void*> void_slist;
00088 #endif
00089   }
00090 
00091   {
00092     typedef void (*FType)();
00093     vector<FType> func_vector;
00094     func_vector.push_back(&FTypeInstance);
00095   }
00096 
00097 #if !defined(__GNUC__) || (__GNUC__ > 2)
00098   {
00099     typedef void (AClass::*MFType)();
00100     vector<MFType> mem_func_vector;
00101     mem_func_vector.push_back(&AClass::func);
00102   }
00103 #endif
00104 
00105   vector<int*> pint_vect;
00106   vector<int*> pint_vect2;
00107   vector<int const*> pcint_vect;
00108   list<int*> pint_list;
00109   list<int*> pint_list2;
00110   list<int const*> pcint_list;
00111 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
00112   slist<int*> pint_slist;
00113   slist<int*> pint_slist2;
00114   slist<int const*> pcint_slist;
00115 #endif
00116   deque<int*> pint_deque;
00117   deque<int*> pint_deque2;
00118   deque<int const*> pcint_deque;
00119 
00120 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
00121   vector<int*> pint_vect_from_list(pint_list.begin(), pint_list.end());
00122 #endif
00123   pint_vect.insert(pint_vect.end(), pint_vect2.begin(), pint_vect2.end());
00124   pint_vect.insert(pint_vect.end(), int_array, int_array + 3);
00125   pint_vect2.insert(pint_vect2.end(), int_array, int_array + 3);
00126   pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3);
00127   pcint_vect.insert(pcint_vect.end(), cint_array, cint_array + 3);
00128 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
00129   pcint_vect.insert(pcint_vect.end(), pint_vect2.begin(), pint_vect2.end());
00130 #endif
00131   pcint_vect.insert(pcint_vect.end(), int_array, int_array + 3);
00132 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
00133   pint_vect.insert(pint_vect.end(), pint_list.begin(), pint_list.end());
00134   pcint_vect.insert(pcint_vect.end(), pint_list.begin(), pint_list.end());
00135   pcint_vect.insert(pcint_vect.end(), pcint_list.begin(), pcint_list.end());
00136   pint_vect.assign(pint_list.begin(), pint_list.end());
00137   pcint_vect.assign(pint_list.begin(), pint_list.end());
00138 #endif
00139   pint_vect.assign(int_array, int_array + 3);
00140   pcint_vect.assign(int_array, int_array + 3);
00141   pcint_vect.assign(cint_array, cint_array + 3);
00142   copy(int_array, int_array + 3, back_inserter(pint_vect));
00143 
00144 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
00145   pint_list.sort(binary_pred<int>());
00146   pcint_list.sort(binary_pred<int const>());
00147   pint_list.unique(binary_pred<int>());
00148   pcint_list.unique(binary_pred<int const>());
00149   pint_list.merge(pint_list, binary_pred<int>());
00150   pcint_list.merge(pcint_list, binary_pred<int const>());
00151   pint_list.remove_if(unary_pred<int>());
00152   pcint_list.remove_if(unary_pred<int const>());
00153 #endif
00154 
00155   copy(int_array, int_array + 3, back_inserter(pint_list));
00156   copy(int_array, int_array + 3, back_inserter(pint_list2));
00157   pint_list.insert(pint_list.end(), pint_list2.begin(), pint_list2.end());
00158 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
00159   pcint_list.insert(pcint_list.end(), pint_list.begin(), pint_list.end());
00160 #endif
00161 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
00162   pint_list.insert(pint_list.end(), pint_vect.begin(), pint_vect.end());
00163   pcint_list.insert(pcint_list.end(), pint_vect.begin(), pint_vect.end());
00164   pcint_list.insert(pcint_list.end(), pcint_vect.begin(), pcint_vect.end());
00165   list<int*> pint_list_from_vect(pint_vect.begin(), pint_vect.end());
00166   pint_list.assign(pint_vect.begin(), pint_vect.end());
00167   pcint_list.assign(pint_vect.begin(), pint_vect.end());
00168 #endif
00169   pint_list.insert(pint_list.begin(), int_array, int_array + 3);
00170   pint_list.insert(pint_list.end(), int_array, int_array + 3);
00171   pcint_list.insert(pcint_list.end(), int_array, int_array + 3);
00172   pcint_list.insert(pcint_list.end(), cint_array, cint_array + 3);
00173   pint_list.assign(int_array, int_array + 3);
00174   pcint_list.assign(int_array, int_array + 3);
00175   pcint_list.assign(cint_array, cint_array + 3);
00176   //pint_list.assign(pcint_vect.begin(), pcint_vect.end());
00177 
00178 #if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
00179   copy(int_array, int_array + 3, front_inserter(pint_slist));
00180   copy(int_array, int_array + 3, front_inserter(pint_slist2));
00181   pint_slist.insert(pint_slist.end(), pint_slist2.begin(), pint_slist2.end());
00182 #  if defined (_STLP_MEMBER_TEMPLATES)
00183   pcint_slist.insert(pcint_slist.end(), pint_slist.begin(), pint_slist.end());
00184 #  endif
00185 #  if !defined (_STLP_DEBUG) || defined (_STLP_MEMBER_TEMPLATES)
00186   pint_slist.insert(pint_slist.end(), pint_vect.begin(), pint_vect.end());
00187   pcint_slist.insert(pcint_slist.end(), pint_vect.begin(), pint_vect.end());
00188   pcint_slist.insert(pcint_slist.end(), pcint_vect.begin(), pcint_vect.end());
00189   slist<int*> pint_slist_from_vect(pint_vect.begin(), pint_vect.end());
00190   pint_slist.assign(pint_vect.begin(), pint_vect.end());
00191   pcint_slist.assign(pint_vect.begin(), pint_vect.end());
00192 #  endif
00193   pint_slist.insert(pint_slist.end(), int_array, int_array + 3);
00194   pcint_slist.insert(pcint_slist.end(), int_array, int_array + 3);
00195   pcint_slist.insert(pcint_slist.end(), cint_array, cint_array + 3);
00196   pint_slist.assign(int_array, int_array + 3);
00197   pcint_slist.assign(int_array, int_array + 3);
00198   pcint_slist.assign(cint_array, cint_array + 3);
00199   //pint_slist.assign(pcint_vect.begin(), pcint_vect.end());
00200 #endif
00201 
00202   copy(int_array, int_array + 3, back_inserter(pint_deque));
00203   copy(int_array, int_array + 3, back_inserter(pint_deque2));
00204   pint_deque.insert(pint_deque.end(), pint_deque2.begin(), pint_deque2.end());
00205 #if !defined (STLPORT) || defined (_STLP_MEMBER_TEMPLATES)
00206   pcint_deque.insert(pcint_deque.end(), pint_deque.begin(), pint_deque.end());
00207 #endif
00208 #if !defined (STLPORT) || !defined(_STLP_DEBUG) || defined(_STLP_MEMBER_TEMPLATES)
00209   pint_deque.insert(pint_deque.end(), pint_vect.begin(), pint_vect.end());
00210   pcint_deque.insert(pcint_deque.end(), pint_vect.begin(), pint_vect.end());
00211   pcint_deque.insert(pcint_deque.end(), pcint_vect.begin(), pcint_vect.end());
00212   deque<int*> pint_deque_from_vect(pint_vect.begin(), pint_vect.end());
00213   pint_deque.assign(pint_vect.begin(), pint_vect.end());
00214   pcint_deque.assign(pint_vect.begin(), pint_vect.end());
00215 #endif
00216   pint_deque.insert(pint_deque.end(), int_array, int_array + 3);
00217   pcint_deque.insert(pcint_deque.end(), int_array, int_array + 3);
00218   pcint_deque.insert(pcint_deque.end(), cint_array, cint_array + 3);
00219   pint_deque.assign(int_array, int_array + 3);
00220   pcint_deque.assign(int_array, int_array + 3);
00221   pcint_deque.assign(cint_array, cint_array + 3);
00222 }
00223 
00224 typedef void (*Func)(int);
00225 void f1(int) {}
00226 
00227 void PtrSpecTest::function_pointer()
00228 {
00229   vector<Func> fs;
00230   fs.push_back(&f1);
00231   CPPUNIT_ASSERT( !fs.empty() );
00232 }

Generated on Fri May 25 2012 04:34:11 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.