[SDK] One step further towards ReactOS source code tree restructure: the sdk folder...
[reactos.git] / reactos / lib / 3rdparty / stlport / test / unit / type_traits_test.cpp
diff --git a/reactos/lib/3rdparty/stlport/test/unit/type_traits_test.cpp b/reactos/lib/3rdparty/stlport/test/unit/type_traits_test.cpp
deleted file mode 100644 (file)
index d881451..0000000
+++ /dev/null
@@ -1,593 +0,0 @@
-#include <algorithm>
-#include <vector>
-#include <string>
-
-#include "cppunit/cppunit_proxy.h"
-
-#if defined (_STLP_USE_NAMESPACES)
-using namespace std;
-#endif
-
-//
-// TestCase class
-//
-class TypeTraitsTest : public CPPUNIT_NS::TestCase
-{
-  CPPUNIT_TEST_SUITE(TypeTraitsTest);
-#if !defined (STLPORT)
-  CPPUNIT_IGNORE;
-#endif
-  CPPUNIT_TEST(manips);
-  CPPUNIT_TEST(integer);
-  CPPUNIT_TEST(rational);
-  CPPUNIT_TEST(pointer_type);
-#if defined (STLPORT) && !defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
-  CPPUNIT_IGNORE;
-#endif
-  CPPUNIT_TEST(reference_type);
-#if defined (STLPORT)
-  CPPUNIT_STOP_IGNORE;
-#endif
-  CPPUNIT_TEST(both_pointer_type);
-  CPPUNIT_TEST(ok_to_use_memcpy);
-  CPPUNIT_TEST(ok_to_use_memmove);
-  CPPUNIT_TEST(trivial_destructor);
-  CPPUNIT_TEST(is_POD);
-  CPPUNIT_TEST(stlport_class);
-  CPPUNIT_TEST_SUITE_END();
-
-protected:
-  void manips();
-  void integer();
-  void rational();
-  void pointer_type();
-  void reference_type();
-  void both_pointer_type();
-  void ok_to_use_memcpy();
-  void ok_to_use_memmove();
-  void trivial_destructor();
-  void is_POD();
-  void stlport_class();
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(TypeTraitsTest);
-
-#if defined (STLPORT)
-
-#  if defined (__GNUC__) && defined (_STLP_USE_NAMESPACES)
-// libstdc++ sometimes exposed its own __true_type type in global
-// namespace resulting in an ambiguity.
-#    define __true_type std::__true_type
-#    define __false_type std::__false_type
-#  endif
-
-int type_to_value(__true_type)
-{ return 1; }
-int type_to_value(__false_type)
-{ return 0; }
-
-int* int_pointer;
-int const* int_const_pointer;
-int volatile* int_volatile_pointer;
-int const volatile* int_const_volatile_pointer;
-int int_val = 0;
-int const int_const_val = 0;
-int volatile int_volatile_val = 0;
-int & int_ref = int_val;
-int const& int_const_ref = int_val;
-int const volatile& int_const_volatile_ref = int_val;
-
-//A type that represent any type:
-struct any_type
-{
-  //Dummy operations to forbid to compilers with intrinsic
-  //type traits support to consider this type as a POD.
-  any_type() : m_data(1) {}
-  any_type(const any_type&) : m_data(2) {}
-  any_type& operator = (const any_type&)
-  { m_data = 3; return *this; }
-  ~any_type() { m_data = 0; }
-
-  size_t m_data;
-};
-
-any_type any;
-any_type* any_pointer;
-any_type const* any_const_pointer;
-any_type volatile* any_volatile_pointer;
-any_type const volatile* any_const_volatile_pointer;
-
-//A type that represent any pod type
-struct any_pod_type
-{};
-
-#  if defined (_STLP_USE_BOOST_SUPPORT)
-//Mandatory for compilers without without partial template specialization.
-BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(any_pod_type)
-#  endif
-
-any_pod_type any_pod;
-any_pod_type* any_pod_pointer;
-any_pod_type const* any_pod_const_pointer;
-any_pod_type volatile* any_pod_volatile_pointer;
-any_pod_type const volatile* any_pod_const_volatile_pointer;
-
-#  if defined (_STLP_USE_NAMESPACES)
-namespace std {
-#  endif
-  _STLP_TEMPLATE_NULL
-  struct __type_traits<any_pod_type> {
-    typedef __true_type has_trivial_default_constructor;
-    typedef __true_type has_trivial_copy_constructor;
-    typedef __true_type has_trivial_assignment_operator;
-    typedef __true_type has_trivial_destructor;
-    typedef __true_type is_POD_type;
-  };
-#  if defined (_STLP_USE_NAMESPACES)
-}
-#  endif
-
-struct base
-{};
-struct derived : public base
-{};
-
-//
-// tests implementation
-//
-template <typename _Src, typename _Dst>
-int is_convertible(_Src, _Dst) {
-#  if !defined(__BORLANDC__)
-  typedef typename _IsConvertible<_Src, _Dst>::_Ret _Ret;
-#  else
-  enum { _Is = _IsConvertible<_Src, _Dst>::value };
-  typedef typename __bool2type<_Is>::_Ret _Ret;
-#  endif
-  return type_to_value(_Ret());
-}
-
-template <typename _Src, typename _Dst>
-int is_cv_convertible(_Src, _Dst) {
-#  if !defined(__BORLANDC__)
-  typedef typename _IsCVConvertible<_Src, _Dst>::_Ret _Ret;
-#  else
-  enum { _Is = _IsCVConvertible<_Src, _Dst>::value };
-  typedef typename __bool2type<_Is>::_Ret _Ret;
-#  endif
-  return type_to_value(_Ret());
-}
-#endif
-
-void TypeTraitsTest::manips()
-{
-#if defined (STLPORT)
-  {
-    typedef __bool2type<0>::_Ret _ZeroRet;
-    CPPUNIT_ASSERT( type_to_value(_ZeroRet()) == 0 );
-    typedef __bool2type<1>::_Ret _OneRet;
-    CPPUNIT_ASSERT( type_to_value(_OneRet()) == 1 );
-    typedef __bool2type<65456873>::_Ret _AnyRet;
-    CPPUNIT_ASSERT( type_to_value(_AnyRet()) == 1 );
-  }
-
-  {
-    CPPUNIT_ASSERT( __type2bool<__true_type>::_Ret == 1 );
-    CPPUNIT_ASSERT( __type2bool<__false_type>::_Ret == 0 );
-    CPPUNIT_ASSERT( __type2bool<any_type>::_Ret == 1 );
-  }
-
-  {
-    typedef _Not<__true_type>::_Ret _NotTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_NotTrueRet()) == 0 );
-    typedef _Not<__false_type>::_Ret _NotFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_NotFalseRet()) == 1 );
-  }
-
-  {
-    typedef _Land2<__true_type, __true_type>::_Ret _TrueTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueTrueRet()) == 1 );
-    typedef _Land2<__true_type, __false_type>::_Ret _TrueFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueFalseRet()) == 0 );
-    typedef _Land2<__false_type, __true_type>::_Ret _FalseTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseTrueRet()) == 0 );
-    typedef _Land2<__false_type, __false_type>::_Ret _FalseFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseFalseRet()) == 0 );
-  }
-
-  {
-    typedef _Land3<__true_type, __true_type, __true_type>::_Ret _TrueTrueTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueTrueTrueRet()) == 1 );
-    typedef _Land3<__true_type, __true_type, __false_type>::_Ret _TrueTrueFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueTrueFalseRet()) == 0 );
-    typedef _Land3<__true_type, __false_type, __true_type>::_Ret _TrueFalseTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueFalseTrueRet()) == 0 );
-    typedef _Land3<__true_type, __false_type, __false_type>::_Ret _TrueFalseFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueFalseFalseRet()) == 0 );
-    typedef _Land3<__false_type, __true_type, __true_type>::_Ret _FalseTrueTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseTrueTrueRet()) == 0 );
-    typedef _Land3<__false_type, __true_type, __false_type>::_Ret _FalseTrueFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseTrueFalseRet()) == 0 );
-    typedef _Land3<__false_type, __false_type, __true_type>::_Ret _FalseFalseTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseFalseTrueRet()) == 0 );
-    typedef _Land3<__false_type, __false_type, __false_type>::_Ret _FalseFalseFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseFalseFalseRet()) == 0 );
-  }
-
-  {
-    typedef _Lor2<__true_type, __true_type>::_Ret _TrueTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueTrueRet()) == 1 );
-    typedef _Lor2<__true_type, __false_type>::_Ret _TrueFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueFalseRet()) == 1 );
-    typedef _Lor2<__false_type, __true_type>::_Ret _FalseTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseTrueRet()) == 1 );
-    typedef _Lor2<__false_type, __false_type>::_Ret _FalseFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseFalseRet()) == 0 );
-  }
-
-  {
-    typedef _Lor3<__true_type, __true_type, __true_type>::_Ret _TrueTrueTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueTrueTrueRet()) == 1 );
-    typedef _Lor3<__true_type, __true_type, __false_type>::_Ret _TrueTrueFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueTrueFalseRet()) == 1 );
-    typedef _Lor3<__true_type, __false_type, __true_type>::_Ret _TrueFalseTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueFalseTrueRet()) == 1 );
-    typedef _Lor3<__true_type, __false_type, __false_type>::_Ret _TrueFalseFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_TrueFalseFalseRet()) == 1 );
-    typedef _Lor3<__false_type, __true_type, __true_type>::_Ret _FalseTrueTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseTrueTrueRet()) == 1 );
-    typedef _Lor3<__false_type, __true_type, __false_type>::_Ret _FalseTrueFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseTrueFalseRet()) == 1 );
-    typedef _Lor3<__false_type, __false_type, __true_type>::_Ret _FalseFalseTrueRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseFalseTrueRet()) == 1 );
-    typedef _Lor3<__false_type, __false_type, __false_type>::_Ret _FalseFalseFalseRet;
-    CPPUNIT_ASSERT( type_to_value(_FalseFalseFalseRet()) == 0 );
-  }
-
-  {
-    typedef __select<1, __true_type, __false_type>::_Ret _SelectFirstRet;
-    CPPUNIT_ASSERT( type_to_value(_SelectFirstRet()) == 1 );
-    typedef __select<0, __true_type, __false_type>::_Ret _SelectSecondRet;
-    CPPUNIT_ASSERT( type_to_value(_SelectSecondRet()) == 0 );
-#  if defined (__BORLANDC__)
-    typedef __selectT<__true_type, __true_type, __false_type>::_Ret _SelectFirstRet;
-    CPPUNIT_ASSERT( type_to_value(_SelectFirstRet()) == 1 );
-    typedef __selectT<__false_type, __true_type, __false_type>::_Ret _SelectSecondRet;
-    CPPUNIT_ASSERT( type_to_value(_SelectSecondRet()) == 0 );
-#  endif
-  }
-
-  {
-    base b;
-    derived d;
-    const derived cd = d;
-    base *pb = &b;
-    derived *pd = &d;
-    derived const *pcd = pd;
-    CPPUNIT_CHECK( is_convertible(any, b) == 0 );
-    CPPUNIT_CHECK( is_convertible(d, b) == 1 );
-    CPPUNIT_CHECK( is_convertible(cd, b) == 1 );
-    // _IsCVConvertible only needs to work for pointer type:
-    //CPPUNIT_CHECK( is_cv_convertible(d, b) == 1 );
-    //CPPUNIT_CHECK( is_cv_convertible(cd, b) == 0 );
-
-    //_IsConvertible do not need to work for pointers:
-    //CPPUNIT_CHECK( is_convertible(pd, pb) == 1 );
-    //CPPUNIT_CHECK( is_convertible(pcd, pb) == 1 );
-
-    CPPUNIT_CHECK( is_cv_convertible(pd, pb) == 1 );
-    CPPUNIT_CHECK( is_cv_convertible(pcd, pb) == 0 );
-  }
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Type>
-int is_integer(_Type) {
-  typedef typename _IsIntegral<_Type>::_Ret _Ret;
-  return type_to_value(_Ret());
-}
-#endif
-
-void TypeTraitsTest::integer()
-{
-#if defined (STLPORT)
-  CPPUNIT_ASSERT( is_integer(bool()) == 1 );
-  CPPUNIT_ASSERT( is_integer(char()) == 1 );
-  typedef signed char signed_char;
-  CPPUNIT_ASSERT( is_integer(signed_char()) == 1 );
-  typedef unsigned char unsigned_char;
-  CPPUNIT_ASSERT( is_integer(unsigned_char()) == 1 );
-#  if defined (_STLP_HAS_WCHAR_T)
-  CPPUNIT_ASSERT( is_integer(wchar_t()) == 1 );
-#  endif
-  CPPUNIT_ASSERT( is_integer(short()) == 1 );
-  typedef unsigned short unsigned_short;
-  CPPUNIT_ASSERT( is_integer(unsigned_short()) == 1 );
-  CPPUNIT_ASSERT( is_integer(int()) == 1 );
-  typedef unsigned int unsigned_int;
-  CPPUNIT_ASSERT( is_integer(unsigned_int()) == 1 );
-  CPPUNIT_ASSERT( is_integer(long()) == 1 );
-  typedef unsigned long unsigned_long;
-  CPPUNIT_ASSERT( is_integer(unsigned_long()) == 1 );
-#  if defined (_STLP_LONG_LONG)
-  typedef _STLP_LONG_LONG long_long;
-  CPPUNIT_ASSERT( is_integer(long_long()) == 1 );
-  typedef unsigned _STLP_LONG_LONG unsigned_long_long;
-  CPPUNIT_ASSERT( is_integer(unsigned_long_long()) == 1 );
-#  endif
-  CPPUNIT_ASSERT( is_integer(float()) == 0 );
-  CPPUNIT_ASSERT( is_integer(double()) == 0 );
-#  if !defined ( _STLP_NO_LONG_DOUBLE )
-  typedef long double long_double;
-  CPPUNIT_ASSERT( is_integer(long_double()) == 0 );
-#  endif
-  CPPUNIT_ASSERT( is_integer(any) == 0 );
-  CPPUNIT_ASSERT( is_integer(any_pointer) == 0 );
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Type>
-int is_rational(_Type) {
-  typedef typename _IsRational<_Type>::_Ret _Ret;
-  return type_to_value(_Ret());
-}
-#endif
-
-void TypeTraitsTest::rational()
-{
-#if defined (STLPORT)
-  CPPUNIT_ASSERT( is_rational(bool()) == 0 );
-  CPPUNIT_ASSERT( is_rational(char()) == 0 );
-  typedef signed char signed_char;
-  CPPUNIT_ASSERT( is_rational(signed_char()) == 0 );
-  typedef unsigned char unsigned_char;
-  CPPUNIT_ASSERT( is_rational(unsigned_char()) == 0 );
-#  if defined (_STLP_HAS_WCHAR_T)
-  CPPUNIT_ASSERT( is_rational(wchar_t()) == 0 );
-#  endif
-  CPPUNIT_ASSERT( is_rational(short()) == 0 );
-  typedef unsigned short unsigned_short;
-  CPPUNIT_ASSERT( is_rational(unsigned_short()) == 0 );
-  CPPUNIT_ASSERT( is_rational(int()) == 0 );
-  typedef unsigned int unsigned_int;
-  CPPUNIT_ASSERT( is_rational(unsigned_int()) == 0 );
-  CPPUNIT_ASSERT( is_rational(long()) == 0 );
-  typedef unsigned long unsigned_long;
-  CPPUNIT_ASSERT( is_rational(unsigned_long()) == 0 );
-#  if defined (_STLP_LONG_LONG)
-  typedef _STLP_LONG_LONG long_long;
-  CPPUNIT_ASSERT( is_rational(long_long()) == 0 );
-  typedef unsigned _STLP_LONG_LONG unsigned_long_long;
-  CPPUNIT_ASSERT( is_rational(unsigned_long_long()) == 0 );
-#  endif
-  CPPUNIT_ASSERT( is_rational(float()) == 1 );
-  CPPUNIT_ASSERT( is_rational(double()) == 1 );
-#  if !defined ( _STLP_NO_LONG_DOUBLE )
-  typedef long double long_double;
-  CPPUNIT_ASSERT( is_rational(long_double()) == 1 );
-#  endif
-  CPPUNIT_ASSERT( is_rational(any) == 0 );
-  CPPUNIT_ASSERT( is_rational(any_pointer) == 0 );
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Type>
-int is_pointer_type(_Type) {
-  return type_to_value(_IsPtrType<_Type>::_Ret());
-}
-#endif
-
-void TypeTraitsTest::pointer_type()
-{
-#if defined (STLPORT)
-  CPPUNIT_ASSERT( is_pointer_type(int_val) == 0 );
-  CPPUNIT_ASSERT( is_pointer_type(int_pointer) == 1 );
-  CPPUNIT_ASSERT( is_pointer_type(int_const_pointer) == 1 );
-  CPPUNIT_ASSERT( is_pointer_type(int_volatile_pointer) == 1 );
-  CPPUNIT_ASSERT( is_pointer_type(int_const_volatile_pointer) == 1 );
-  CPPUNIT_ASSERT( is_pointer_type(int_ref) == 0 );
-  CPPUNIT_ASSERT( is_pointer_type(int_const_ref) == 0 );
-  CPPUNIT_ASSERT( is_pointer_type(any) == 0 );
-  CPPUNIT_ASSERT( is_pointer_type(any_pointer) == 1 );
-#endif
-}
-
-void TypeTraitsTest::reference_type()
-{
-#if defined (STLPORT) && defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
-  CPPUNIT_ASSERT( type_to_value(_IsRefType<int>::_Ret()) == 0 );
-  CPPUNIT_ASSERT( type_to_value(_IsRefType<int*>::_Ret()) == 0 );
-  CPPUNIT_ASSERT( type_to_value(_IsRefType<int&>::_Ret()) == 1 );
-  CPPUNIT_ASSERT( type_to_value(_IsRefType<int const&>::_Ret()) == 1 );
-  CPPUNIT_ASSERT( type_to_value(_IsRefType<int const volatile&>::_Ret()) == 1 );
-
-  CPPUNIT_ASSERT( type_to_value(_IsOKToSwap(int_pointer, int_pointer, __true_type(), __true_type())._Answer()) == 1 );
-  CPPUNIT_ASSERT( type_to_value(_IsOKToSwap(int_pointer, int_pointer, __false_type(), __false_type())._Answer()) == 0 );
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Tp1, typename _Tp2>
-int are_both_pointer_type (_Tp1, _Tp2) {
-  return type_to_value(_BothPtrType<_Tp1, _Tp2>::_Answer());
-}
-#endif
-
-void TypeTraitsTest::both_pointer_type()
-{
-#if defined (STLPORT)
-  CPPUNIT_CHECK( are_both_pointer_type(int_val, int_val) == 0 );
-  CPPUNIT_CHECK( are_both_pointer_type(int_pointer, int_pointer) == 1 );
-  CPPUNIT_CHECK( are_both_pointer_type(int_const_pointer, int_const_pointer) == 1 );
-  CPPUNIT_CHECK( are_both_pointer_type(int_volatile_pointer, int_volatile_pointer) == 1 );
-  CPPUNIT_CHECK( are_both_pointer_type(int_const_volatile_pointer, int_const_volatile_pointer) == 1 );
-  CPPUNIT_CHECK( are_both_pointer_type(int_ref, int_ref) == 0 );
-  CPPUNIT_CHECK( are_both_pointer_type(int_const_ref, int_const_ref) == 0 );
-  CPPUNIT_CHECK( are_both_pointer_type(any, any) == 0 );
-  CPPUNIT_CHECK( are_both_pointer_type(any_pointer, any_pointer) == 1 );
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Tp1, typename _Tp2>
-int is_ok_to_use_memcpy(_Tp1 val1, _Tp2 val2) {
-  return type_to_value(_UseTrivialCopy(val1, val2)._Answer());
-}
-#endif
-
-void TypeTraitsTest::ok_to_use_memcpy()
-{
-#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS)
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_pointer) == 1 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_pointer) == 1 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, int_const_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_const_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_pointer, int_const_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_const_volatile_pointer, int_const_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(int_pointer, any_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, int_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, any_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pointer, any_const_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, int_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, any_pod_pointer) == 1 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(any_pod_pointer, any_pod_const_pointer) == 0 );
-  vector<float> **pvf = 0;
-  vector<int> **pvi = 0;
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(pvf, pvi) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memcpy(pvi, pvf) == 0 );
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Tp1, typename _Tp2>
-int is_ok_to_use_memmove(_Tp1 val1, _Tp2 val2) {
-  return type_to_value(_UseTrivialUCopy(val1, val2)._Answer());
-}
-#endif
-
-void TypeTraitsTest::ok_to_use_memmove()
-{
-#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS)
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_pointer) == 1 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_pointer) == 1 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, int_const_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_const_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_pointer, int_const_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_const_volatile_pointer, int_const_volatile_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(int_pointer, any_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, int_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, any_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pointer, any_const_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, int_pointer) == 0 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, any_pod_pointer) == 1 );
-  CPPUNIT_CHECK( is_ok_to_use_memmove(any_pod_pointer, any_pod_const_pointer) == 0 );
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Tp>
-int has_trivial_destructor(_Tp) {
-  typedef typename __type_traits<_Tp>::has_trivial_destructor _TrivialDestructor;
-  return type_to_value(_TrivialDestructor());
-}
-
-struct DestructorMonitor
-{
-  ~DestructorMonitor()
-  { ++nb_destructor_call; }
-
-  static size_t nb_destructor_call;
-};
-
-size_t DestructorMonitor::nb_destructor_call = 0;
-
-#  if defined (_STLP_USE_NAMESPACES)
-namespace std {
-#  endif
-  _STLP_TEMPLATE_NULL
-  struct __type_traits<DestructorMonitor> {
-    typedef __true_type has_trivial_default_constructor;
-    typedef __true_type has_trivial_copy_constructor;
-    typedef __true_type has_trivial_assignment_operator;
-    typedef __true_type has_trivial_destructor;
-    typedef __true_type is_POD_type;
-  };
-#  if defined (_STLP_USE_NAMESPACES)
-}
-#  endif
-#endif
-
-void TypeTraitsTest::trivial_destructor()
-{
-#if defined (STLPORT)
-  CPPUNIT_CHECK( has_trivial_destructor(int_pointer) == 1 );
-  CPPUNIT_CHECK( has_trivial_destructor(int_const_pointer) == 1 );
-  CPPUNIT_CHECK( has_trivial_destructor(int_volatile_pointer) == 1 );
-  CPPUNIT_CHECK( has_trivial_destructor(int_const_volatile_pointer) == 1 );
-  CPPUNIT_CHECK( has_trivial_destructor(any_pointer) == 1 );
-  CPPUNIT_CHECK( has_trivial_destructor(any) == 0 );
-  CPPUNIT_CHECK( has_trivial_destructor(any_pointer) == 1 );
-  CPPUNIT_CHECK( has_trivial_destructor(any_pod) == 1 );
-  CPPUNIT_CHECK( has_trivial_destructor(string()) == 0 );
-
-  //Check of the meta information impact in a container implementation
-  {
-    vector<DestructorMonitor> v(10);
-    DestructorMonitor::nb_destructor_call = 0;
-  }
-  CPPUNIT_CHECK( DestructorMonitor::nb_destructor_call == 0 );
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Tp>
-int is_POD_type(_Tp) {
-  typedef typename __type_traits<_Tp>::is_POD_type _IsPODType;
-  return type_to_value(_IsPODType());
-}
-#endif
-
-void TypeTraitsTest::is_POD()
-{
-#if defined (STLPORT)
-  CPPUNIT_CHECK( is_POD_type(int_pointer) == 1 );
-  CPPUNIT_CHECK( is_POD_type(int_const_pointer) == 1 );
-  CPPUNIT_CHECK( is_POD_type(int_volatile_pointer) == 1 );
-  CPPUNIT_CHECK( is_POD_type(int_const_volatile_pointer) == 1 );
-  CPPUNIT_CHECK( is_POD_type(any_pointer) == 1 );
-  CPPUNIT_CHECK( is_POD_type(any) == 0 );
-  CPPUNIT_CHECK( is_POD_type(any_pointer) == 1 );
-  CPPUNIT_CHECK( is_POD_type(any_pod) == 1 );
-  CPPUNIT_CHECK( is_POD_type(string()) == 0 );
-#endif
-}
-
-#if defined (STLPORT)
-template <typename _Tp>
-int is_stlport_class(_Tp) {
-  typedef _IsSTLportClass<_Tp> _STLportClass;
-#    if !defined (__BORLANDC__)
-  typedef typename _STLportClass::_Ret _Is;
-#    else
-  typedef typename __bool2type<_STLportClass::_Is>::_Ret _Is;
-#    endif
-  return type_to_value(_Is());
-}
-#endif
-
-void TypeTraitsTest::stlport_class()
-{
-#if defined (STLPORT)
-  CPPUNIT_CHECK( is_stlport_class(allocator<char>()) == 1 );
-#  if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
-  CPPUNIT_CHECK( is_stlport_class(string()) == 1 );
-#  endif
-  CPPUNIT_CHECK( is_stlport_class(any) == 0 );
-#endif
-}