[SDK] One step further towards ReactOS source code tree restructure: the sdk folder...
[reactos.git] / reactos / lib / 3rdparty / stlport / test / unit / num_put_get_test.cpp
diff --git a/reactos/lib/3rdparty/stlport/test/unit/num_put_get_test.cpp b/reactos/lib/3rdparty/stlport/test/unit/num_put_get_test.cpp
deleted file mode 100644 (file)
index 13b250f..0000000
+++ /dev/null
@@ -1,1266 +0,0 @@
-#include <limits>
-
-#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
-#  include <iomanip>
-#  include <string>
-#  include <sstream>
-#  include <cstdio>
-/*
-#  include <iostream>
-#  include <ieee754.h>
-*/
-
-#  include "complete_digits.h"
-#  include "cppunit/cppunit_proxy.h"
-
-#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
-using namespace std;
-#  endif
-
-//
-// TestCase class
-//
-class NumPutGetTest : public CPPUNIT_NS::TestCase
-{
-  CPPUNIT_TEST_SUITE(NumPutGetTest);
-#  if defined (__BORLANDC__)
-  /* Ignore FPU exceptions, set FPU precision to 64 bits */
-  unsigned int _float_control_word = _control87(0, 0);
-  _control87(PC_64|MCW_EM|IC_AFFINE, MCW_PC|MCW_EM|MCW_IC);
-#  endif
-  CPPUNIT_TEST(num_put_float);
-  CPPUNIT_TEST(num_put_integer);
-  CPPUNIT_TEST(num_get_float);
-  CPPUNIT_TEST(num_get_integer);
-  CPPUNIT_TEST(inhex);
-  CPPUNIT_TEST(pointer);
-  CPPUNIT_TEST(fix_float_long);
-  CPPUNIT_TEST(custom_numpunct);
-#  if defined (__BORLANDC__)
-  /* Reset floating point control word */
-  _clear87();
-  _control87(_float_control_word, MCW_PC|MCW_EM|MCW_IC);
-#  endif
-  CPPUNIT_TEST_SUITE_END();
-
-private:
-  void num_put_float();
-  void num_put_integer();
-  void num_get_float();
-  void num_get_integer();
-  void inhex();
-  void pointer();
-  void fix_float_long();
-  void custom_numpunct();
-
-  static bool check_float(float val, float ref)
-  {
-    float epsilon = numeric_limits<float>::epsilon();
-    return val <= ref + epsilon && val >= ref - epsilon;
-  }
-
-  static bool check_double(double val, double ref)
-  {
-    double epsilon = numeric_limits<double>::epsilon();
-    return val <= ref + epsilon && val >= ref - epsilon;
-  }
-
-  static string reset_stream(ostringstream &ostr)
-  {
-    string tmp = ostr.str();
-    ostr.str("");
-    return tmp;
-  }
-
-#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)
-  template <class F>
-  void check_get_float( F v )
-  {
-    F in_val_d = v;
-    typedef numeric_limits<F> limits;
-    {
-      stringstream str;
-
-      str << "1E+" << limits::max_exponent10;
-
-      str >> in_val_d;
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d != limits::infinity() );
-    }
-    {
-      stringstream str;
-
-      str << "-1E+" << limits::max_exponent10;
-
-      str >> in_val_d;
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d != -limits::infinity() );
-    }
-    {
-      stringstream str;
-
-      str << "1E" << limits::min_exponent10;
-
-      str >> in_val_d;
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d != F(0.0) );
-    }
-    {
-      stringstream str;
-
-      str << "1E+" << (limits::max_exponent10 + 1);
-
-      str >> in_val_d;
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d == limits::infinity() );
-    }
-    {
-      stringstream str;
-
-      str << "-1E+" << (limits::max_exponent10 + 1);
-
-      str >> in_val_d;
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d == -limits::infinity() );
-    }
-    {
-      stringstream str;
-
-      str << "1E" << (limits::min_exponent10 - 1);
-
-      str >> in_val_d;
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d >= F(0.0) && in_val_d <= limits::min() );
-    }
-#if !defined (__MINGW32__)
-    {
-      stringstream str;
-
-      str << limits::max();
-
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_CHECK( str.str() != "inf" );
-      CPPUNIT_CHECK( str.str() != "-inf" );
-      CPPUNIT_CHECK( str.str() != "nan" );
-      CPPUNIT_CHECK( str.str() != "-nan" );
-      //CPPUNIT_MESSAGE( str.str().c_str() );
-
-      //str.str("");
-      //str << limits::max_exponent10;
-      //CPPUNIT_MESSAGE( str.str().c_str() );
-
-      str >> in_val_d;
-
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d != limits::infinity() );
-    }
-    {
-      stringstream str;
-
-      str << fixed << limits::max();
-
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_CHECK( str.str() != "inf" );
-      CPPUNIT_CHECK( str.str() != "-inf" );
-      CPPUNIT_CHECK( str.str() != "nan" );
-      CPPUNIT_CHECK( str.str() != "-nan" );
-      //CPPUNIT_MESSAGE( str.str().c_str() );
-
-      //str.str("");
-      //str << limits::max_exponent10;
-      //CPPUNIT_MESSAGE( str.str().c_str() );
-
-      str >> in_val_d;
-
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d != limits::infinity() );
-    }
-    {
-      stringstream str;
-
-      str << scientific << setprecision(50) << limits::max();
-
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_CHECK( str.str() != "inf" );
-      CPPUNIT_CHECK( str.str() != "-inf" );
-      CPPUNIT_CHECK( str.str() != "nan" );
-      CPPUNIT_CHECK( str.str() != "-nan" );
-      //CPPUNIT_MESSAGE( str.str().c_str() );
-
-      //str.str("");
-      //str << limits::max_exponent10;
-      //CPPUNIT_MESSAGE( str.str().c_str() );
-
-      str >> in_val_d;
-
-      CPPUNIT_ASSERT(!str.fail());
-      CPPUNIT_ASSERT(str.eof());
-      CPPUNIT_CHECK( in_val_d == in_val_d );
-      CPPUNIT_CHECK( in_val_d != limits::infinity() );
-    }
-#endif
-    {
-      stringstream str;
-
-      str << limits::infinity();
-
-      CPPUNIT_ASSERT( !str.fail() );
-      CPPUNIT_ASSERT( !limits::has_infinity || str.str() == "inf" );
-    }
-    {
-      stringstream str;
-
-      str << -limits::infinity();
-
-      CPPUNIT_ASSERT( !str.fail() );
-      CPPUNIT_ASSERT( !limits::has_infinity || str.str() == "-inf" );
-    }
-    {
-      stringstream str;
-
-      str << limits::quiet_NaN();
-
-      CPPUNIT_ASSERT( !str.fail() );
-      CPPUNIT_ASSERT( !limits::has_quiet_NaN || str.str() == "nan" );
-    }
-    {
-      stringstream str;
-
-      str << -limits::quiet_NaN();
-
-      CPPUNIT_ASSERT( !str.fail() );
-      CPPUNIT_ASSERT( !limits::has_quiet_NaN || str.str() == "-nan" );
-    }
-    {
-      stringstream str;
-
-      str << "0." << string(limits::max_exponent10, '0') << "1e" << (limits::max_exponent10 + 1);
-      CPPUNIT_ASSERT( !str.fail() );
-
-      str >> in_val_d;
-      CPPUNIT_ASSERT( !str.fail() );
-      CPPUNIT_ASSERT( str.eof() );
-      CPPUNIT_CHECK( in_val_d == 1 );
-    }
-    {
-      stringstream str;
-
-      str << "1" << string(-(limits::min_exponent10 - 1), '0') << "e" << (limits::min_exponent10 - 1);
-      CPPUNIT_ASSERT( !str.fail() );
-
-      str >> in_val_d;
-      CPPUNIT_ASSERT( !str.fail() );
-      CPPUNIT_ASSERT( str.eof() );
-      CPPUNIT_CHECK( in_val_d == 1 );
-    }
-#  if defined (_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x530)
-    // The following tests are showing that simply changing stream
-    // precision lead to different result. Do not seems to be a real
-    // problem, simply rounding approximation but additional study should
-    // be done after 5.2 release.
-    {
-      stringstream str;
-      str << setprecision(limits::digits10 + 2) << limits::max();
-
-      CPPUNIT_MESSAGE(str.str().c_str());
-      CPPUNIT_ASSERT( !str.fail() );
-
-      F val;
-      str >> val;
-
-      CPPUNIT_ASSERT( !str.fail() );
-      CPPUNIT_ASSERT( limits::infinity() > val );
-    }
-    {
-      stringstream str;
-      str << setprecision(limits::digits10 + 1) << limits::max();
-
-      CPPUNIT_MESSAGE(str.str().c_str());
-      CPPUNIT_ASSERT( !str.fail() );
-
-      F val;
-      str >> val;
-
-      CPPUNIT_ASSERT( !str.fail() );
-      CPPUNIT_ASSERT( limits::infinity() > val );
-    }
-#  endif
-  }
-#else
-#  define __check_get_float( F ) \
-  void check_get_float( F v ) \
-  { \
-    F in_val_d = v; \
-    { \
-      stringstream str; \
- \
-      str << "1E+" << numeric_limits<F>::max_exponent10; \
- \
-      str >> in_val_d; \
-      CPPUNIT_ASSERT(!str.fail()); \
-      CPPUNIT_ASSERT(str.eof()); \
-      CPPUNIT_CHECK( in_val_d == in_val_d ); \
-      CPPUNIT_CHECK( in_val_d != numeric_limits<F>::infinity() ); \
-    } \
-    { \
-      stringstream str; \
- \
-      str << "-1E+" << numeric_limits<F>::max_exponent10; \
- \
-      str >> in_val_d; \
-      CPPUNIT_ASSERT(!str.fail()); \
-      CPPUNIT_ASSERT(str.eof()); \
-      CPPUNIT_CHECK( in_val_d == in_val_d ); \
-      CPPUNIT_CHECK( in_val_d != -numeric_limits<F>::infinity() ); \
-    } \
-    { \
-      stringstream str; \
- \
-      str << "1E" << numeric_limits<F>::min_exponent10; \
- \
-      str >> in_val_d; \
-      CPPUNIT_ASSERT(!str.fail()); \
-      CPPUNIT_ASSERT(str.eof()); \
-      CPPUNIT_CHECK( in_val_d == in_val_d ); \
-      CPPUNIT_CHECK( in_val_d != F(0.0) ); \
-    } \
-    { \
-      stringstream str; \
- \
-      str << "1E+" << (numeric_limits<F>::max_exponent10 + 1); \
- \
-      str >> in_val_d; \
-      CPPUNIT_ASSERT(!str.fail()); \
-      CPPUNIT_ASSERT(str.eof()); \
-      CPPUNIT_CHECK( in_val_d == in_val_d ); \
-      CPPUNIT_CHECK( in_val_d == numeric_limits<F>::infinity() ); \
-    } \
-    { \
-      stringstream str; \
- \
-      str << "-1E+" << (numeric_limits<F>::max_exponent10 + 1); \
- \
-      str >> in_val_d; \
-      CPPUNIT_ASSERT(!str.fail()); \
-      CPPUNIT_ASSERT(str.eof()); \
-      CPPUNIT_CHECK( in_val_d == in_val_d ); \
-      CPPUNIT_CHECK( in_val_d == -numeric_limits<F>::infinity() ); \
-    } \
-    { \
-      stringstream str; \
- \
-      str << "1E" << (numeric_limits<F>::min_exponent10 - 1); \
- \
-      str >> in_val_d; \
-      CPPUNIT_ASSERT(!str.fail()); \
-      CPPUNIT_ASSERT(str.eof()); \
-      CPPUNIT_CHECK( in_val_d == in_val_d ); \
-      CPPUNIT_CHECK( in_val_d >= F(0.0) && in_val_d <= numeric_limits<F>::min() ); \
-    } \
-  }
-
-  __check_get_float( float )
-  __check_get_float( double )
-#  if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
-  __check_get_float( long double )
-#  endif
-#  undef __check_get_float
-#endif // _STLP_NO_MEMBER_TEMPLATES
-};
-
-CPPUNIT_TEST_SUITE_REGISTRATION(NumPutGetTest);
-
-#if defined (_MSC_VER)
-#  pragma warning (disable : 4056)
-#  pragma warning (disable : 4756)
-#endif
-
-//
-// tests implementation
-//
-void NumPutGetTest::num_put_float()
-{
-  {
-    string output, digits;
-
-    {
-      ostringstream ostr;
-      ostr << 1.23457e+17f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      digits = "17";
-      complete_digits(digits);
-      CPPUNIT_CHECK(output == string("1.23457e+") + digits );
-    }
-    
-    {
-      ostringstream ostr;
-      ostr << setprecision(200) << 1.23457e+17f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK( output.size() < 200 );
-    }
-    
-    {
-      ostringstream ostr;
-      ostr << setprecision(200) << numeric_limits<float>::min();
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK( output.size() < 200 );
-    }
-    
-    {
-      ostringstream ostr;
-      ostr << fixed << 1.23457e+17f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output.size() == 25);
-      CPPUNIT_CHECK(output.substr(0, 5) == "12345");
-      CPPUNIT_CHECK(output.substr(18) == ".000000");
-    }
-
-    {
-      ostringstream ostr;
-      ostr << fixed << showpos << 1.23457e+17f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output.size() == 26);
-      CPPUNIT_CHECK(output.substr(0, 6) == "+12345");
-      CPPUNIT_CHECK(output.substr(19) == ".000000");
-    }
-
-    {
-      ostringstream ostr;
-      ostr << fixed << showpos << setprecision(100) << 1.23457e+17f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output.size() == 120);
-      CPPUNIT_CHECK(output.substr(0, 6) == "+12345");
-      CPPUNIT_CHECK(output.substr(19) == ".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
-    }
-
-    {
-      ostringstream ostr;
-      ostr << scientific << setprecision(8) << 0.12345678f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      digits = "1";
-      complete_digits(digits);
-      CPPUNIT_CHECK(output == string("1.23456780e-") + digits );
-    }
-
-    {
-      ostringstream ostr;
-      ostr << fixed << setprecision(8) << setw(30) << setfill('0') << 0.12345678f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output == "000000000000000000000.12345678");
-    }
-
-    {
-      ostringstream ostr;
-      ostr << fixed << showpos << setprecision(8) << setw(30) << setfill('0') << 0.12345678f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output == "0000000000000000000+0.12345678");
-    }
-
-    {
-      ostringstream ostr;
-      ostr << fixed << showpos << setprecision(8) << setw(30) << left << setfill('0') << 0.12345678f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output == "+0.123456780000000000000000000");
-    }
-
-    {
-      ostringstream ostr;
-      ostr << fixed << showpos << setprecision(8) << setw(30) << internal << setfill('0') << 0.12345678f;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output == "+00000000000000000000.12345678");
-    }
-
-    {
-      ostringstream ostr;
-      ostr << fixed << showpos << setprecision(100) << 1.234567e+17;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output.size() == 120);
-      CPPUNIT_CHECK(output.substr(0, 6) == "+12345");
-      CPPUNIT_CHECK(output.substr(19) == ".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
-    }
-
-#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
-    {
-      ostringstream ostr;
-      ostr << fixed << showpos << setprecision(100) << 1.234567e+17l;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK(output.size() == 120);
-      CPPUNIT_CHECK(output.substr(0, 6) == "+12345");
-      CPPUNIT_CHECK(output.substr(19) == ".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
-    }
-#endif
-
-    {
-      ostringstream ostr;
-      ostr << scientific << setprecision(50) << 0.0;
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      CPPUNIT_CHECK( output == "0.00000000000000000000000000000000000000000000000000e+00" );
-    }
-    {
-      ostringstream ostr;
-      ostr << fixed << setprecision(100) << numeric_limits<float>::max();
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      //CPPUNIT_MESSAGE( output.c_str() );
-    }
-
-    {
-      ostringstream ostr;
-      ostr << setprecision(100) << numeric_limits<double>::max();
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      //CPPUNIT_MESSAGE( output.c_str() );
-    }
-
-#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
-    {
-      ostringstream ostr;
-      ostr << setprecision(100) << numeric_limits<long double>::max();
-      CPPUNIT_ASSERT(ostr.good());
-      output = reset_stream(ostr);
-      //CPPUNIT_MESSAGE( output.c_str() );
-    }
-#endif
-
-    //{
-    //  ostringstream ostr;
-    //  ostr << setprecision(-numeric_limits<float>::min_exponent10 + numeric_limits<float>::digits10 + 9) << numeric_limits<float>::min();
-    //  CPPUNIT_ASSERT(ostr.good());
-    //  output = reset_stream(ostr);
-    //  //CPPUNIT_MESSAGE( output.c_str() );
-    //}
-
-    //{
-    //  ostringstream ostr;
-    //  ostr << setprecision(-numeric_limits<double>::min_exponent10 + numeric_limits<double>::digits10) << numeric_limits<double>::min();
-    //  CPPUNIT_ASSERT(ostr.good());
-    //  output = reset_stream(ostr);
-    //  //CPPUNIT_MESSAGE( output.c_str() );
-    //}
-
-//#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
-//    {
-//      ostringstream ostr;
-//      ostr << setprecision(-numeric_limits<long double>::min_exponent10 + numeric_limits<long double>::digits10) << numeric_limits<long double>::min();
-//      CPPUNIT_ASSERT(ostr.good());
-//      output = reset_stream(ostr);
-//      CPPUNIT_MESSAGE( output.c_str() );
-//    }
-//#endif
-  }
-
-  {
-    ostringstream str;
-
-    str.setf(ios::fixed, ios::floatfield);
-    str << 1.0e+5;
-    // cerr << str.str() << endl;
-    CPPUNIT_CHECK( str.str() == "100000.000000" );
-
-    reset_stream(str);
-    str.precision(0);
-    str << 1.0e+5;
-    CPPUNIT_CHECK( str.str() == "100000" );
-
-    reset_stream(str);
-    str.precision(4);
-    str << 1.0e+5;
-    CPPUNIT_CHECK( str.str() == "100000.0000" );
-
-    reset_stream(str);
-    str.precision(0);
-    str << 1.0e+83;
-    CPPUNIT_CHECK( str.str().size() == 84 );
-    //printf("\nC result: %.0f\n", 1.0e+83);
-    //CPPUNIT_MESSAGE( str.str().c_str() );
-    //CPPUNIT_CHECK( str.str() == "100000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
-
-    // cerr.setf(ios::fixed, ios::floatfield);
-    // cerr << DBL_MAX << endl;
-    // cerr << 1.0e+37 << endl;
-  }
-}
-
-#define CHECK_COMPLETE(type, val, base, showbase, showpos, casing, width, adjust, expected) \
-{ \
-  type tmp = val; \
-  ostringstream ostr; \
-  ostr << base << showbase << showpos << casing << setw(width) << adjust << tmp; \
-  CPPUNIT_CHECK( ostr.str() == expected ); \
-}
-
-#define CHECK(type, val, base, expected) \
-  CHECK_COMPLETE(type, val, base, noshowbase, noshowpos, nouppercase, 0, right, expected)
-
-void NumPutGetTest::num_put_integer()
-{
-  //octal outputs
-  {
-    CHECK(short, 0, oct, "0")
-    CHECK(short, 1, oct, "1")
-    CHECK(short, 12345, oct, "30071")
-    if (sizeof(short) == 2) {
-      CHECK(short, -1, oct, "177777")
-      CHECK(short, -12345, oct, "147707")
-    }
-
-    CHECK(unsigned short, 0, oct, "0")
-    CHECK(unsigned short, 12345, oct, "30071")
-
-    CHECK(int, 0, oct, "0")
-    CHECK(int, 12345678, oct, "57060516")
-    if (sizeof(int) == 4) {
-      CHECK(int, -1, oct, "37777777777")
-      CHECK(int, -12345678, oct, "37720717262")
-    }
-
-    CHECK(unsigned int, 0, oct, "0")
-    CHECK(unsigned int, 12345678, oct, "57060516")
-
-    CHECK(long, 0, oct, "0")
-    CHECK(long, 12345678, oct, "57060516")
-    if (sizeof(long) == 4) {
-      CHECK(long, -1, oct, "37777777777")
-      CHECK(long, -12345678, oct, "37720717262")
-    }
-
-    CHECK(unsigned long, 0, oct, "0")
-    CHECK(unsigned long, 12345678, oct, "57060516")
-
-#if defined (STLPORT) && defined (_STLP_LONG_LONG)
-    CHECK(_STLP_LONG_LONG, 0, oct, "0")
-    CHECK(_STLP_LONG_LONG, 12345678, oct, "57060516")
-    if (sizeof(_STLP_LONG_LONG) == 8) {
-      CHECK(_STLP_LONG_LONG, -1, oct, "1777777777777777777777")
-      CHECK(_STLP_LONG_LONG, -12345678, oct, "1777777777777720717262")
-    }
-
-    CHECK(unsigned _STLP_LONG_LONG, 0, oct, "0")
-    CHECK(unsigned _STLP_LONG_LONG, 12345678, oct, "57060516")
-#endif
-
-    //Even with showbase, 0 value gives "0" (see printf documentation)
-    CHECK_COMPLETE(short, 0, oct, showbase, noshowpos, nouppercase, 0, right, "0")
-    CHECK_COMPLETE(short, 0, oct, showbase, showpos, nouppercase, 6, right, "     0")
-
-    CHECK_COMPLETE(short, 1, oct, showbase, noshowpos, nouppercase, 6, right, "    01")
-    CHECK_COMPLETE(short, 1, oct, showbase, noshowpos, nouppercase, 6, left, "01    ")
-    CHECK_COMPLETE(short, 1, oct, showbase, showpos, nouppercase, 6, internal, "    01")
-  }
-
-  //decimal outputs
-  {
-    CHECK(short, 0, dec, "0")
-    CHECK(short, -1, dec, "-1")
-    CHECK(short, 12345, dec, "12345")
-    CHECK(short, -12345, dec, "-12345")
-
-    CHECK(unsigned short, 0, dec, "0")
-    CHECK(unsigned short, 12345, dec, "12345")
-
-    CHECK(int, 0, dec, "0")
-    CHECK(int, -1, dec, "-1")
-    CHECK(int, 12345678, dec, "12345678")
-    CHECK(int, -12345678, dec, "-12345678")
-
-    CHECK(unsigned int, 0, dec, "0")
-    CHECK(unsigned int, 12345678, dec, "12345678")
-
-    CHECK(long, 0, dec, "0")
-    CHECK(long, -1, dec, "-1")
-    CHECK(long, 12345678, dec, "12345678")
-    CHECK(long, -12345678, dec, "-12345678")
-
-    CHECK(unsigned long, 0, dec, "0")
-    CHECK(unsigned long, 12345678, dec, "12345678")
-#if defined (STLPORT) && defined (_STLP_LONG_LONG)
-    CHECK(_STLP_LONG_LONG, 0, dec, "0")
-    CHECK(_STLP_LONG_LONG, -1, dec, "-1")
-    CHECK(_STLP_LONG_LONG, 12345678, dec, "12345678")
-    CHECK(_STLP_LONG_LONG, -12345678, dec, "-12345678")
-
-    CHECK(unsigned _STLP_LONG_LONG, 0, dec, "0")
-    CHECK(unsigned _STLP_LONG_LONG, 12345678, dec, "12345678")
-#endif
-
-    CHECK_COMPLETE(short, 0, dec, showbase, showpos, nouppercase, 0, right, "+0")
-    CHECK_COMPLETE(short, 0, dec, showbase, showpos, nouppercase, 6, right, "    +0")
-    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, right, "    +1")
-    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, left, "+1    ")
-    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, internal, "+    1")
-  }
-
-  //hexadecimal outputs
-  {
-    CHECK(short, 0, hex, "0")
-    CHECK(short, 12345, hex, "3039")
-    if (sizeof(short) == 2) {
-      CHECK(short, -1, hex, "ffff")
-      CHECK(short, -12345, hex, "cfc7")
-    }
-
-    CHECK(unsigned short, 0, hex, "0")
-    CHECK(unsigned short, 12345, hex, "3039")
-
-    CHECK(int, 0, hex, "0")
-    CHECK(int, 12345678, hex, "bc614e")
-    if (sizeof(int) == 4) {
-      CHECK(int, -1, hex, "ffffffff")
-      CHECK(int, -12345678, hex, "ff439eb2")
-    }
-
-    CHECK(unsigned int, 0, hex, "0")
-    CHECK(unsigned int, 12345678, hex, "bc614e")
-
-    CHECK(long, 0, hex, "0")
-    CHECK(long, 12345678, hex, "bc614e")
-    if (sizeof(long) == 4) {
-      CHECK(long, -1, hex, "ffffffff")
-      CHECK(long, -12345678, hex, "ff439eb2")
-    }
-
-    CHECK(unsigned long, 0, hex, "0")
-    CHECK(unsigned long, 12345678, hex, "bc614e")
-#if defined (STLPORT) && defined (_STLP_LONG_LONG)
-    CHECK(_STLP_LONG_LONG, 0, hex, "0")
-    CHECK(_STLP_LONG_LONG, 12345678, hex, "bc614e")
-    if (sizeof(_STLP_LONG_LONG) == 8) {
-      CHECK(_STLP_LONG_LONG, -1, hex, "ffffffffffffffff")
-      CHECK(_STLP_LONG_LONG, -12345678, hex, "ffffffffff439eb2")
-    }
-
-    CHECK(unsigned _STLP_LONG_LONG, 0, hex, "0")
-    CHECK(unsigned _STLP_LONG_LONG, 12345678, hex, "bc614e")
-#endif
-
-    //Even with showbase, 0 value gives "0" output (see printf documentation)
-    CHECK_COMPLETE(short, 0, hex, showbase, showpos, nouppercase, 0, right, "0")
-    CHECK_COMPLETE(short, 0, hex, showbase, noshowpos, nouppercase, 6, right, "     0")
-    CHECK_COMPLETE(short, 0, hex, showbase, noshowpos, nouppercase, 6, internal, "     0")
-
-    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, right, "   0x1")
-    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, left, "0x1   ")
-    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, internal, "0x   1")
-    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, uppercase, 6, left, "0X1   ")
-    CHECK_COMPLETE(short, 1, hex, showbase, showpos, uppercase, 6, internal, "0X   1")
-  }
-}
-
-void NumPutGetTest::num_get_float()
-{
-  float in_val;
-
-  istringstream istr;
-
-  istr.str("1.2345");
-  istr >> in_val;
-  CPPUNIT_ASSERT(!istr.fail());
-  CPPUNIT_ASSERT(istr.eof());
-  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));
-  istr.clear();
-
-  istr.str("-1.2345");
-  istr >> in_val;
-  CPPUNIT_ASSERT(!istr.fail());
-  CPPUNIT_ASSERT(istr.eof());
-  CPPUNIT_ASSERT(check_float(in_val, -1.2345f));
-  istr.clear();
-
-  istr.str("+1.2345");
-  istr >> in_val;
-  CPPUNIT_ASSERT(!istr.fail());
-  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));
-  istr.clear();
-
-  istr.str("000000000000001.234500000000");
-  istr >> in_val;
-  CPPUNIT_ASSERT(!istr.fail());
-  CPPUNIT_ASSERT(istr.eof());
-  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));
-  istr.clear();
-
-  istr.str("1.2345e+04");
-  istr >> in_val;
-  CPPUNIT_ASSERT(!istr.fail());
-  CPPUNIT_ASSERT(istr.eof());
-  CPPUNIT_ASSERT(check_float(in_val, 12345.0f));
-  istr.clear();
-
-  CPPUNIT_MESSAGE( "float" );
-  check_get_float( 0.0F );
-  CPPUNIT_MESSAGE( "double" );
-  check_get_float( 0.0 );
-#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
-  CPPUNIT_MESSAGE( "long double" );
-  check_get_float( 0.0L );
-#endif
-  {
-    stringstream str;
-
-    str << "1e" << numeric_limits<double>::max_exponent10;
-    CPPUNIT_ASSERT(!str.fail());
-
-    float val;
-    str >> val;
-    CPPUNIT_ASSERT(!str.fail());
-    CPPUNIT_ASSERT(str.eof());
-    CPPUNIT_ASSERT( numeric_limits<double>::max_exponent10 <= numeric_limits<float>::max_exponent10 ||
-                    val == numeric_limits<float>::infinity() );
-  }
-  {
-    stringstream str;
-
-    str << "1e" << numeric_limits<double>::min_exponent10;
-    CPPUNIT_ASSERT(!str.fail());
-
-    float val;
-    str >> val;
-    CPPUNIT_ASSERT(!str.fail());
-    CPPUNIT_ASSERT(str.eof());
-    CPPUNIT_ASSERT( numeric_limits<double>::min_exponent10 >= numeric_limits<float>::min_exponent10 ||
-                    val == 0.0f );
-  }
-#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
-  {
-    stringstream str;
-
-    str << "1e" << numeric_limits<long double>::max_exponent10;
-    CPPUNIT_ASSERT(!str.fail());
-
-    double val;
-    str >> val;
-    CPPUNIT_ASSERT(!str.fail());
-    CPPUNIT_ASSERT(str.eof());
-    CPPUNIT_ASSERT( numeric_limits<long double>::max_exponent10 <= numeric_limits<double>::max_exponent10 ||
-                    val == numeric_limits<double>::infinity() );
-  }
-  {
-    stringstream str;
-
-    str << "1e" << numeric_limits<long double>::min_exponent10;
-    CPPUNIT_ASSERT(!str.fail());
-
-    double val;
-    str >> val;
-    CPPUNIT_ASSERT(!str.fail());
-    CPPUNIT_ASSERT(str.eof());
-    CPPUNIT_ASSERT( numeric_limits<long double>::min_exponent10 >= numeric_limits<double>::min_exponent10 ||
-                    val == 0.0 );
-  }
-  {
-    const char* p = "2.718281828459045235360287471352662497757247093e0";
-    std::stringstream s;
-    s << p;
-    long double x;
-    s >> x;
-    CPPUNIT_ASSERT( x > 2.70l && x < 2.72l );
-  }
-#endif
-}
-
-void NumPutGetTest::num_get_integer()
-{
-  //octal input
-  {
-    istringstream istr;
-    istr.str("30071");
-    short val;
-    istr >> oct >> val;
-    CPPUNIT_ASSERT( !istr.fail() );
-    CPPUNIT_ASSERT( istr.eof() );
-    CPPUNIT_ASSERT( val == 12345 );
-    istr.clear();
-
-    if (sizeof(short) == 2) {
-      istr.str("177777");
-      istr >> oct >> val;
-      CPPUNIT_ASSERT( !istr.fail() );
-      CPPUNIT_ASSERT( istr.eof() );
-      CPPUNIT_ASSERT( val == -1 );
-      istr.clear();
-    }
-  }
-
-  //decimal input
-  {
-    istringstream istr;
-    istr.str("10000");
-    short val = -1;
-    istr >> val;
-    CPPUNIT_ASSERT( !istr.fail() );
-    CPPUNIT_ASSERT( istr.eof() );
-    CPPUNIT_ASSERT( val == 10000 );
-    istr.clear();
-
-    istr.str("+10000");
-    val = -1;
-    istr >> val;
-    CPPUNIT_ASSERT( !istr.fail() );
-    CPPUNIT_ASSERT( istr.eof() );
-    CPPUNIT_ASSERT( val == 10000 );
-    istr.clear();
-
-    if (sizeof(short) == 2) {
-      val = -1;
-      istr.str("10000000");
-      istr >> val;
-      CPPUNIT_ASSERT( istr.fail() );
-      CPPUNIT_ASSERT( istr.eof() );
-      CPPUNIT_ASSERT( val == -1 );
-      istr.clear();
-    }
-
-    val = -1;
-    istr.str("0x0");
-    istr >> val;
-    CPPUNIT_ASSERT( !istr.fail() );
-    CPPUNIT_ASSERT( !istr.eof() );
-    CPPUNIT_ASSERT( val == 0 );
-    istr.clear();
-
-    val = -1;
-    istr.str("000001");
-    istr >> val;
-    CPPUNIT_ASSERT( !istr.fail() );
-    CPPUNIT_ASSERT( istr.eof() );
-    CPPUNIT_ASSERT( val == 1 );
-    istr.clear();
-  }
-
-  //hexadecimal input
-  {
-    istringstream istr;
-    istr.str("3039");
-    short val = -1;
-    istr >> hex >> val;
-    CPPUNIT_ASSERT( !istr.fail() );
-    CPPUNIT_ASSERT( istr.eof() );
-    CPPUNIT_ASSERT( val == 12345 );
-    istr.clear();
-
-    istr.str("x3039");
-    val = -1;
-    istr >> hex >> val;
-    CPPUNIT_ASSERT( istr.fail() );
-    CPPUNIT_ASSERT( !istr.eof() );
-    CPPUNIT_ASSERT( val == -1 );
-    istr.clear();
-
-    istr.str("03039");
-    val = -1;
-    istr >> hex >> val;
-    CPPUNIT_ASSERT( !istr.fail() );
-    CPPUNIT_ASSERT( istr.eof() );
-    CPPUNIT_ASSERT( val == 12345 );
-    istr.clear();
-
-    istr.str("0x3039");
-    istr >> hex >> val;
-    CPPUNIT_ASSERT( !istr.fail() );
-    CPPUNIT_ASSERT( istr.eof() );
-    CPPUNIT_ASSERT( val == 12345 );
-    istr.clear();
-
-    if (sizeof(short) == 2) {
-      val = -1;
-      istr.str("cfc7");
-      istr >> hex >> val;
-      CPPUNIT_ASSERT( !istr.fail() );
-      CPPUNIT_ASSERT( istr.eof() );
-      CPPUNIT_ASSERT( val == -12345 );
-      istr.clear();
-    }
-  }
-}
-
-void NumPutGetTest::inhex()
-{
-  {
-    ostringstream s;
-    s << hex << 0;
-    CPPUNIT_CHECK( s.str() == "0" );
-  }
-  {
-    ostringstream s;
-    s << hex << 0xff;
-    CPPUNIT_CHECK( s.str() == "ff" );
-  }
-  {
-    ostringstream s;
-    s << hex << setw( 4 ) << 0xff;
-    CPPUNIT_CHECK( s.str() == "  ff" );
-  }
-  {
-    ostringstream s;
-    s << hex << setw( 4 ) << 0;
-    CPPUNIT_CHECK( s.str() == "   0" );
-  }
-  {
-    ostringstream s;
-    s << hex << showbase << 0;
-    CPPUNIT_CHECK( s.str() == "0" );
-  }
-  {
-    ostringstream s;
-    s << hex << showbase << 0xff;
-    CPPUNIT_CHECK( s.str() == "0xff" );
-  }
-  {
-    ostringstream s;
-    s << hex << showbase << setw( 4 ) << 0xff;
-    CPPUNIT_CHECK( s.str() == "0xff" );
-  }
-  { // special case for regression (partially duplicate CHECK_COMPLETE above):
-    ostringstream s;
-    s.setf( ios_base::internal, ios_base::adjustfield );
-    s << hex << showbase << setw(8+2) << 0;
-    CPPUNIT_CHECK( s.str() == "         0" );
-  }
-}
-
-void NumPutGetTest::pointer()
-{
-  // Problem with printing pointer to null
-
-  /*
-   * Really C's formatting not help here, due to:
-   *
-   * p  The argument shall be a pointer to void. The value of
-   *    the pointer is converted to a sequence of printable characters,
-   *    in an implementation-defined manner.
-   */
-  {
-    /*
-    char buf[128];
-    void *p = (void *)0xff00;
-    sprintf( buf, "%p", p );
-    // cerr << buf << endl;
-    // Hmmm, I see 0xff00 on box with 32-bits address; pointer like 'unsigned hex'? 
-    if ( sizeof( p ) == 2 ) {
-      CPPUNIT_ASSERT( strcmp( buf, "0xff00" ) == 0 );
-    } else if ( sizeof( p ) == 4 ) {
-      CPPUNIT_ASSERT( strcmp( buf, "0x0000ff00" ) == 0 );
-    } else if ( sizeof( p ) == 8 ) {
-      CPPUNIT_ASSERT( strcmp( buf, "0x000000000000ff00" ) == 0 );
-    } else {
-      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );
-    }
-    */
-  }
-  {
-    /*
-    char buf[128];
-    void *p = 0;
-    */
-    // sprintf( buf, "%p", p );
-    /* Cool. "%p" print '(nil)'; "%#x" print '0' */
-    // sprintf( buf, "%#x", (unsigned)p );
-    // cerr << buf << endl;
-  }
-  {
-    ostringstream s;
-    void *p = (void *)0xff00;
-    s << p;
-    CPPUNIT_ASSERT( s.good() );
-    if ( sizeof( p ) == 2 ) {
-      CPPUNIT_ASSERT( s.str() == "0xff00" );
-    } else if ( sizeof( p ) == 4 ) {
-      CPPUNIT_ASSERT( s.str() == "0x0000ff00" ); // this pass
-    } else if ( sizeof( p ) == 8 ) {
-      CPPUNIT_ASSERT( s.str() == "0x000000000000ff00" );
-    } else {
-      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );
-    }
-  }
-  {
-    ostringstream s;
-    void *p = 0;
-    s << p;
-    CPPUNIT_ASSERT( s.good() );
-    if ( sizeof( p ) == 2 ) {
-      CPPUNIT_ASSERT( s.str() == "0x0000" );
-    } else if ( sizeof( p ) == 4 ) {
-      CPPUNIT_ASSERT( s.str() == "0x00000000" ); // but this will fail, if follow %p
-    } else if ( sizeof( p ) == 8 ) {
-      CPPUNIT_ASSERT( s.str() == "0x0000000000000000" );
-    } else {
-      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );
-    }
-  }
-}
-
-void NumPutGetTest::fix_float_long()
-{
-  ostringstream str;
-
-  str.setf(ios::fixed, ios::floatfield);
-  str << 1.0e+5;
-  CPPUNIT_CHECK( str.str() == "100000.000000" );
-
-  reset_stream(str);
-  str.precision(0);
-  str << 1.0e+5;
-  CPPUNIT_CHECK( str.str() == "100000" );
-
-  reset_stream(str);
-  str.precision(4);
-  str << 1.0e+5;
-  CPPUNIT_CHECK( str.str() == "100000.0000" );
-
-  reset_stream(str);
-  str.precision(0);
-  str << 1.0e+83;
-  {
-    istringstream istr( str.str() );
-    double f;
-    istr >> f;
-    CPPUNIT_CHECK( !istr.fail() );
-    if ( int(numeric_limits<double>::digits10) < 83 ) {
-      double delta = 1.0;
-      for ( int ee = 83 - int(numeric_limits<double>::digits10); ee > 0; --ee ) {
-        delta *= 10.0;
-      }
-      // we may loss some digits here, but not more than mantissa:
-      CPPUNIT_CHECK( (f > (1.0e+83 - delta)) && (f < (1.0e+83 + delta)) );
-    } else {
-      CPPUNIT_CHECK( check_double(f, 1.0e+83) );
-    }
-  }
-
-#if 0 // #ifndef _STLP_NO_LONG_DOUBLE
-  reset_stream(str);
-  str.precision(0);
-  str << 1.0e+83l;
-  {
-    istringstream istr( str.str() );
-    long double f;
-    istr >> f;
-    CPPUNIT_CHECK( !istr.fail() );
-    if ( int(numeric_limits<long double>::digits10) < 83 ) {
-      long double delta = 1.0l;
-      for ( int ee = 83 - int(numeric_limits<long double>::digits10); ee > 0; --ee ) {
-        delta *= 10.0l;
-      }
-      // we may loss some digits here, but not more than mantissa:
-      cerr << "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" << endl;
-      cerr << str.str() << endl;
-      cerr << delta << endl;
-      cerr << f << endl;
-      CPPUNIT_CHECK( (f > (1.0e+83l - delta)) && (f < (1.0e+83l + delta)) );
-    } else {
-      CPPUNIT_CHECK( check_double(f, 1.0e+83l) );
-    }
-  }
-#endif
-
-  reset_stream(str);
-  str.precision(0);
-  str << numeric_limits<double>::max();
-  {
-    istringstream istr( str.str() );
-    double f;
-    istr >> f;
-    CPPUNIT_CHECK( !istr.fail() );
-    if ( int(numeric_limits<double>::digits10) < int(numeric_limits<double>::max_exponent10) ) {
-      double delta = 9.0;
-      for ( int ee = int(numeric_limits<double>::max_exponent10) - int(numeric_limits<double>::digits10); ee > 0; --ee ) {
-        delta *= 10.0;
-      }
-      // we may loss some digits here, but not more than mantissa:
-      CPPUNIT_CHECK( (f > (numeric_limits<double>::max() - delta)) );
-    }
-  }
-
-#if 0 // #ifndef _STLP_NO_LONG_DOUBLE
-  reset_stream(str);
-  str.precision(0);
-  str << numeric_limits<long double>::max();
-  {
-    istringstream istr( str.str() );
-    long double f;
-    istr >> f;
-    CPPUNIT_CHECK( !istr.fail() );
-    if ( int(numeric_limits<long double>::digits10) < int(numeric_limits<long double>::max_exponent10) ) {
-      long double delta = 1.0l;
-      for ( int ee = int(numeric_limits<long double>::max_exponent10) - int(numeric_limits<long double>::digits10); ee > 0; --ee ) {
-        delta *= 10.0l;
-      }
-      // we may loss some digits here, but not more than mantissa:
-      CPPUNIT_CHECK( (f > (numeric_limits<long double>::max() - delta)) );
-    }
-  }
-#endif
-}
-
-class CommaSepNumPunct : public numpunct<char> {
-  char do_thousands_sep() const { return ','; }
-  string do_grouping() const { return string("\1\2\3") + (char)CHAR_MAX; }
-};
-
-#define CHECK2(val, expected) \
-  os.str(""); os << fixed << setprecision(3) << showpos << val; \
-  CPPUNIT_ASSERT( os.str() == expected )
-
-void NumPutGetTest::custom_numpunct()
-{
-    ostringstream os;
-    locale loc(os.getloc(), new CommaSepNumPunct());
-    os.imbue(loc);
-
-    CHECK2(1, "+1");
-    CHECK2(10, "+1,0");
-    CHECK2(100, "+10,0");
-    CHECK2(1000, "+1,00,0");
-
-    CHECK2(1.234, "+1.234");
-    CHECK2(123.456, "+12,3.456");
-    CHECK2(1234.567, "+1,23,4.567");
-    CHECK2(12345.678, "+12,34,5.678");
-    CHECK2(123456.789, "+123,45,6.789");
-    CHECK2(1234567.891, "+1,234,56,7.891");
-    CHECK2(123456789.123, "+123,456,78,9.123");
-    //CHECK2(100000000000000000000000000000.0, "+100000000000000000000000,000,00,0.000");
-    CHECK2(numeric_limits<double>::infinity(), "+inf");
-
-    CHECK2(-1.234, "-1.234");
-    CHECK2(-123.456, "-12,3.456");
-    CHECK2(-1234.567, "-1,23,4.567");
-    CHECK2(-12345.678, "-12,34,5.678");
-    CHECK2(-123456.789, "-123,45,6.789");
-    CHECK2(-1234567.891, "-1,234,56,7.891");
-    CHECK2(-123456789.123, "-123,456,78,9.123");
-    //CHECK2(-100000000000000000000000000000.0, "-100000000000000000000000,000,00,0.000");
-    CHECK2(-numeric_limits<double>::infinity(), "-inf");
-}
-
-#endif