1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <limits>
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <iomanip>
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <string>
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <sstream>
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <cstdio>
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <iostream>
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <ieee754.h>
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott*/
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include "complete_digits.h"
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include "cppunit/cppunit_proxy.h"
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass NumPutGetTest : public CPPUNIT_NS::TestCase
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE(NumPutGetTest);
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (__BORLANDC__)
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /* Ignore FPU exceptions, set FPU precision to 64 bits */
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  unsigned int _float_control_word = _control87(0, 0);
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _control87(PC_64|MCW_EM|IC_AFFINE, MCW_PC|MCW_EM|MCW_IC);
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(num_put_float);
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(num_put_integer);
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(num_get_float);
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(num_get_integer);
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(inhex);
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(pointer);
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(fix_float_long);
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(custom_numpunct);
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (__BORLANDC__)
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /* Reset floating point control word */
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _clear87();
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _control87(_float_control_word, MCW_PC|MCW_EM|MCW_IC);
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE_END();
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate:
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void num_put_float();
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void num_put_integer();
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void num_get_float();
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void num_get_integer();
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void inhex();
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void pointer();
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void fix_float_long();
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void custom_numpunct();
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static bool check_float(float val, float ref)
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    float epsilon = numeric_limits<float>::epsilon();
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return val <= ref + epsilon && val >= ref - epsilon;
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static bool check_double(double val, double ref)
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    double epsilon = numeric_limits<double>::epsilon();
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return val <= ref + epsilon && val >= ref - epsilon;
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  static string reset_stream(ostringstream &ostr)
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    string tmp = ostr.str();
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostr.str("");
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return tmp;
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_NO_MEMBER_TEMPLATES)
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  template <class F>
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void check_get_float( F v )
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    F in_val_d = v;
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    typedef numeric_limits<F> limits;
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1E+" << limits::max_exponent10;
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != limits::infinity() );
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "-1E+" << limits::max_exponent10;
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != -limits::infinity() );
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1E" << limits::min_exponent10;
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != F(0.0) );
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1E+" << (limits::max_exponent10 + 1);
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == limits::infinity() );
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "-1E+" << (limits::max_exponent10 + 1);
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == -limits::infinity() );
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1E" << (limits::min_exponent10 - 1);
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d >= F(0.0) && in_val_d <= limits::min() );
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (__MINGW32__)
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << limits::max();
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "inf" );
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "-inf" );
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "nan" );
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "-nan" );
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( str.str().c_str() );
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //str.str("");
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //str << limits::max_exponent10;
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( str.str().c_str() );
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != limits::infinity() );
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << fixed << limits::max();
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "inf" );
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "-inf" );
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "nan" );
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "-nan" );
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( str.str().c_str() );
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //str.str("");
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //str << limits::max_exponent10;
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( str.str().c_str() );
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != limits::infinity() );
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << scientific << setprecision(50) << limits::max();
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "inf" );
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "-inf" );
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "nan" );
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( str.str() != "-nan" );
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( str.str().c_str() );
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //str.str("");
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //str << limits::max_exponent10;
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( str.str().c_str() );
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail());
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof());
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d );
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != limits::infinity() );
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << limits::infinity();
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !limits::has_infinity || str.str() == "inf" );
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << -limits::infinity();
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !limits::has_infinity || str.str() == "-inf" );
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << limits::quiet_NaN();
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !limits::has_quiet_NaN || str.str() == "nan" );
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << -limits::quiet_NaN();
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !limits::has_quiet_NaN || str.str() == "-nan" );
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "0." << string(limits::max_exponent10, '0') << "1e" << (limits::max_exponent10 + 1);
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( str.eof() );
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == 1 );
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1" << string(-(limits::min_exponent10 - 1), '0') << "e" << (limits::min_exponent10 - 1);
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d;
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( str.eof() );
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == 1 );
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLPORT_VERSION) && (_STLPORT_VERSION >= 0x530)
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // The following tests are showing that simply changing stream
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // precision lead to different result. Do not seems to be a real
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // problem, simply rounding approximation but additional study should
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // be done after 5.2 release.
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << setprecision(limits::digits10 + 2) << limits::max();
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_MESSAGE(str.str().c_str());
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      F val;
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> val;
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( limits::infinity() > val );
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str;
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << setprecision(limits::digits10 + 1) << limits::max();
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_MESSAGE(str.str().c_str());
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      F val;
298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> val;
299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !str.fail() );
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( limits::infinity() > val );
302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else
306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  define __check_get_float( F ) \
307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void check_get_float( F v ) \
308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { \
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    F in_val_d = v; \
310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    { \
311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str; \
312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1E+" << numeric_limits<F>::max_exponent10; \
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d; \
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail()); \
317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof()); \
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d ); \
319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != numeric_limits<F>::infinity() ); \
320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } \
321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    { \
322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str; \
323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "-1E+" << numeric_limits<F>::max_exponent10; \
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d; \
327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail()); \
328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof()); \
329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d ); \
330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != -numeric_limits<F>::infinity() ); \
331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } \
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    { \
333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str; \
334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1E" << numeric_limits<F>::min_exponent10; \
336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d; \
338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail()); \
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof()); \
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d ); \
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d != F(0.0) ); \
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } \
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    { \
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str; \
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1E+" << (numeric_limits<F>::max_exponent10 + 1); \
347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d; \
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail()); \
350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof()); \
351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d ); \
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == numeric_limits<F>::infinity() ); \
353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } \
354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    { \
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str; \
356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "-1E+" << (numeric_limits<F>::max_exponent10 + 1); \
358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d; \
360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail()); \
361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof()); \
362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d ); \
363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == -numeric_limits<F>::infinity() ); \
364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } \
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    { \
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      stringstream str; \
367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str << "1E" << (numeric_limits<F>::min_exponent10 - 1); \
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott \
370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      str >> in_val_d; \
371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(!str.fail()); \
372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(str.eof()); \
373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d == in_val_d ); \
374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( in_val_d >= F(0.0) && in_val_d <= numeric_limits<F>::min() ); \
375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } \
376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  __check_get_float( float )
379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  __check_get_float( double )
380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  __check_get_float( long double )
382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  undef __check_get_float
384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif // _STLP_NO_MEMBER_TEMPLATES
385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(NumPutGetTest);
388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_MSC_VER)
390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  pragma warning (disable : 4056)
391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  pragma warning (disable : 4756)
392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation
396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid NumPutGetTest::num_put_float()
398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    string output, digits;
401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << 1.23457e+17f;
405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      digits = "17";
408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      complete_digits(digits);
409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output == string("1.23457e+") + digits );
410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << setprecision(200) << 1.23457e+17f;
415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( output.size() < 200 );
418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << setprecision(200) << numeric_limits<float>::min();
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( output.size() < 200 );
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << 1.23457e+17f;
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.size() == 25);
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(0, 5) == "12345");
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(18) == ".000000");
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << showpos << 1.23457e+17f;
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.size() == 26);
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(0, 6) == "+12345");
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(19) == ".000000");
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << showpos << setprecision(100) << 1.23457e+17f;
451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.size() == 120);
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(0, 6) == "+12345");
455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(19) == ".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << scientific << setprecision(8) << 0.12345678f;
461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      digits = "1";
464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      complete_digits(digits);
465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output == string("1.23456780e-") + digits );
466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << setprecision(8) << setw(30) << setfill('0') << 0.12345678f;
471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output == "000000000000000000000.12345678");
474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << showpos << setprecision(8) << setw(30) << setfill('0') << 0.12345678f;
479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output == "0000000000000000000+0.12345678");
482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << showpos << setprecision(8) << setw(30) << left << setfill('0') << 0.12345678f;
487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
488e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
489e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output == "+0.123456780000000000000000000");
490e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
491e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
492e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
493e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
494e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << showpos << setprecision(8) << setw(30) << internal << setfill('0') << 0.12345678f;
495e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
496e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
497e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output == "+00000000000000000000.12345678");
498e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
499e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
500e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
501e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
502e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << showpos << setprecision(100) << 1.234567e+17;
503e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
504e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
505e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.size() == 120);
506e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(0, 6) == "+12345");
507e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(19) == ".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
508e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
509e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
510e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
511e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
512e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
513e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << showpos << setprecision(100) << 1.234567e+17l;
514e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
515e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
516e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.size() == 120);
517e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(0, 6) == "+12345");
518e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK(output.substr(19) == ".0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
519e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
520e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
521e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
523e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
524e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << scientific << setprecision(50) << 0.0;
525e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
526e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
527e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( output == "0.00000000000000000000000000000000000000000000000000e+00" );
528e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
529e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
530e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
531e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << fixed << setprecision(100) << numeric_limits<float>::max();
532e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
533e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
534e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( output.c_str() );
535e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
536e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
537e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
538e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
539e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << setprecision(100) << numeric_limits<double>::max();
540e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
541e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
542e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( output.c_str() );
543e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
544e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
545e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
546e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    {
547e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostringstream ostr;
548e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      ostr << setprecision(100) << numeric_limits<long double>::max();
549e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT(ostr.good());
550e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      output = reset_stream(ostr);
551e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      //CPPUNIT_MESSAGE( output.c_str() );
552e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
553e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
554e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
555e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //{
556e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  ostringstream ostr;
557e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  ostr << setprecision(-numeric_limits<float>::min_exponent10 + numeric_limits<float>::digits10 + 9) << numeric_limits<float>::min();
558e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  CPPUNIT_ASSERT(ostr.good());
559e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  output = reset_stream(ostr);
560e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  //CPPUNIT_MESSAGE( output.c_str() );
561e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //}
562e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
563e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //{
564e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  ostringstream ostr;
565e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  ostr << setprecision(-numeric_limits<double>::min_exponent10 + numeric_limits<double>::digits10) << numeric_limits<double>::min();
566e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  CPPUNIT_ASSERT(ostr.good());
567e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  output = reset_stream(ostr);
568e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //  //CPPUNIT_MESSAGE( output.c_str() );
569e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //}
570e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
571e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
572e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//    {
573e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//      ostringstream ostr;
574e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//      ostr << setprecision(-numeric_limits<long double>::min_exponent10 + numeric_limits<long double>::digits10) << numeric_limits<long double>::min();
575e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//      CPPUNIT_ASSERT(ostr.good());
576e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//      output = reset_stream(ostr);
577e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//      CPPUNIT_MESSAGE( output.c_str() );
578e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//    }
579e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//#endif
580e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
581e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
582e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
583e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream str;
584e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
585e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str.setf(ios::fixed, ios::floatfield);
586e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str << 1.0e+5;
587e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // cerr << str.str() << endl;
588e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( str.str() == "100000.000000" );
589e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
590e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    reset_stream(str);
591e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str.precision(0);
592e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str << 1.0e+5;
593e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( str.str() == "100000" );
594e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
595e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    reset_stream(str);
596e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str.precision(4);
597e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str << 1.0e+5;
598e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( str.str() == "100000.0000" );
599e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
600e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    reset_stream(str);
601e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str.precision(0);
602e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str << 1.0e+83;
603e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( str.str().size() == 84 );
604e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //printf("\nC result: %.0f\n", 1.0e+83);
605e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_MESSAGE( str.str().c_str() );
606e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_CHECK( str.str() == "100000000000000000000000000000000000000000000000000000000000000000000000000000000000" );
607e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
608e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // cerr.setf(ios::fixed, ios::floatfield);
609e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // cerr << DBL_MAX << endl;
610e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // cerr << 1.0e+37 << endl;
611e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
612e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
613e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
614e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define CHECK_COMPLETE(type, val, base, showbase, showpos, casing, width, adjust, expected) \
615e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ \
616e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  type tmp = val; \
617e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ostringstream ostr; \
618e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ostr << base << showbase << showpos << casing << setw(width) << adjust << tmp; \
619e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( ostr.str() == expected ); \
620e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
621e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
622e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define CHECK(type, val, base, expected) \
623e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CHECK_COMPLETE(type, val, base, noshowbase, noshowpos, nouppercase, 0, right, expected)
624e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
625e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid NumPutGetTest::num_put_integer()
626e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
627e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //octal outputs
628e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
629e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, 0, oct, "0")
630e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, 1, oct, "1")
631e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, 12345, oct, "30071")
632e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(short) == 2) {
633e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(short, -1, oct, "177777")
634e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(short, -12345, oct, "147707")
635e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
636e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
637e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned short, 0, oct, "0")
638e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned short, 12345, oct, "30071")
639e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
640e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(int, 0, oct, "0")
641e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(int, 12345678, oct, "57060516")
642e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(int) == 4) {
643e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(int, -1, oct, "37777777777")
644e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(int, -12345678, oct, "37720717262")
645e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
646e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
647e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned int, 0, oct, "0")
648e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned int, 12345678, oct, "57060516")
649e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
650e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(long, 0, oct, "0")
651e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(long, 12345678, oct, "57060516")
652e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(long) == 4) {
653e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(long, -1, oct, "37777777777")
654e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(long, -12345678, oct, "37720717262")
655e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
656e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
657e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned long, 0, oct, "0")
658e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned long, 12345678, oct, "57060516")
659e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
660e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && defined (_STLP_LONG_LONG)
661e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(_STLP_LONG_LONG, 0, oct, "0")
662e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(_STLP_LONG_LONG, 12345678, oct, "57060516")
663e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(_STLP_LONG_LONG) == 8) {
664e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(_STLP_LONG_LONG, -1, oct, "1777777777777777777777")
665e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(_STLP_LONG_LONG, -12345678, oct, "1777777777777720717262")
666e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
667e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
668e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned _STLP_LONG_LONG, 0, oct, "0")
669e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned _STLP_LONG_LONG, 12345678, oct, "57060516")
670e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
671e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
672e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //Even with showbase, 0 value gives "0" (see printf documentation)
673e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 0, oct, showbase, noshowpos, nouppercase, 0, right, "0")
674e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 0, oct, showbase, showpos, nouppercase, 6, right, "     0")
675e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
676e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, oct, showbase, noshowpos, nouppercase, 6, right, "    01")
677e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, oct, showbase, noshowpos, nouppercase, 6, left, "01    ")
678e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, oct, showbase, showpos, nouppercase, 6, internal, "    01")
679e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
680e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
681e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //decimal outputs
682e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
683e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, 0, dec, "0")
684e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, -1, dec, "-1")
685e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, 12345, dec, "12345")
686e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, -12345, dec, "-12345")
687e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
688e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned short, 0, dec, "0")
689e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned short, 12345, dec, "12345")
690e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
691e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(int, 0, dec, "0")
692e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(int, -1, dec, "-1")
693e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(int, 12345678, dec, "12345678")
694e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(int, -12345678, dec, "-12345678")
695e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
696e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned int, 0, dec, "0")
697e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned int, 12345678, dec, "12345678")
698e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
699e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(long, 0, dec, "0")
700e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(long, -1, dec, "-1")
701e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(long, 12345678, dec, "12345678")
702e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(long, -12345678, dec, "-12345678")
703e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
704e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned long, 0, dec, "0")
705e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned long, 12345678, dec, "12345678")
706e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && defined (_STLP_LONG_LONG)
707e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(_STLP_LONG_LONG, 0, dec, "0")
708e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(_STLP_LONG_LONG, -1, dec, "-1")
709e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(_STLP_LONG_LONG, 12345678, dec, "12345678")
710e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(_STLP_LONG_LONG, -12345678, dec, "-12345678")
711e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
712e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned _STLP_LONG_LONG, 0, dec, "0")
713e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned _STLP_LONG_LONG, 12345678, dec, "12345678")
714e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
715e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
716e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 0, dec, showbase, showpos, nouppercase, 0, right, "+0")
717e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 0, dec, showbase, showpos, nouppercase, 6, right, "    +0")
718e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, right, "    +1")
719e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, left, "+1    ")
720e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, dec, showbase, showpos, nouppercase, 6, internal, "+    1")
721e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
722e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
723e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //hexadecimal outputs
724e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
725e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, 0, hex, "0")
726e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(short, 12345, hex, "3039")
727e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(short) == 2) {
728e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(short, -1, hex, "ffff")
729e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(short, -12345, hex, "cfc7")
730e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
731e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
732e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned short, 0, hex, "0")
733e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned short, 12345, hex, "3039")
734e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
735e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(int, 0, hex, "0")
736e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(int, 12345678, hex, "bc614e")
737e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(int) == 4) {
738e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(int, -1, hex, "ffffffff")
739e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(int, -12345678, hex, "ff439eb2")
740e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
741e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
742e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned int, 0, hex, "0")
743e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned int, 12345678, hex, "bc614e")
744e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
745e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(long, 0, hex, "0")
746e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(long, 12345678, hex, "bc614e")
747e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(long) == 4) {
748e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(long, -1, hex, "ffffffff")
749e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(long, -12345678, hex, "ff439eb2")
750e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
751e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
752e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned long, 0, hex, "0")
753e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned long, 12345678, hex, "bc614e")
754e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && defined (_STLP_LONG_LONG)
755e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(_STLP_LONG_LONG, 0, hex, "0")
756e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(_STLP_LONG_LONG, 12345678, hex, "bc614e")
757e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(_STLP_LONG_LONG) == 8) {
758e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(_STLP_LONG_LONG, -1, hex, "ffffffffffffffff")
759e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CHECK(_STLP_LONG_LONG, -12345678, hex, "ffffffffff439eb2")
760e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
761e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
762e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned _STLP_LONG_LONG, 0, hex, "0")
763e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK(unsigned _STLP_LONG_LONG, 12345678, hex, "bc614e")
764e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
765e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
766e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //Even with showbase, 0 value gives "0" output (see printf documentation)
767e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 0, hex, showbase, showpos, nouppercase, 0, right, "0")
768e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 0, hex, showbase, noshowpos, nouppercase, 6, right, "     0")
769e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 0, hex, showbase, noshowpos, nouppercase, 6, internal, "     0")
770e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
771e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, right, "   0x1")
772e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, left, "0x1   ")
773e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, nouppercase, 6, internal, "0x   1")
774e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, hex, showbase, noshowpos, uppercase, 6, left, "0X1   ")
775e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK_COMPLETE(short, 1, hex, showbase, showpos, uppercase, 6, internal, "0X   1")
776e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
777e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
778e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
779e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid NumPutGetTest::num_get_float()
780e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
781e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  float in_val;
782e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
783e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istringstream istr;
784e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
785e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.str("1.2345");
786e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr >> in_val;
787e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(!istr.fail());
788e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(istr.eof());
789e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));
790e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.clear();
791e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
792e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.str("-1.2345");
793e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr >> in_val;
794e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(!istr.fail());
795e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(istr.eof());
796e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(check_float(in_val, -1.2345f));
797e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.clear();
798e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
799e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.str("+1.2345");
800e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr >> in_val;
801e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(!istr.fail());
802e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));
803e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.clear();
804e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
805e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.str("000000000000001.234500000000");
806e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr >> in_val;
807e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(!istr.fail());
808e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(istr.eof());
809e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(check_float(in_val, 1.2345f));
810e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.clear();
811e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
812e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.str("1.2345e+04");
813e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr >> in_val;
814e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(!istr.fail());
815e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(istr.eof());
816e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT(check_float(in_val, 12345.0f));
817e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istr.clear();
818e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
819e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_MESSAGE( "float" );
820e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  check_get_float( 0.0F );
821e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_MESSAGE( "double" );
822e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  check_get_float( 0.0 );
823e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
824e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_MESSAGE( "long double" );
825e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  check_get_float( 0.0L );
826e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
827e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
828e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    stringstream str;
829e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
830e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str << "1e" << numeric_limits<double>::max_exponent10;
831e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(!str.fail());
832e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
833e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    float val;
834e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str >> val;
835e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(!str.fail());
836e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(str.eof());
837e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( numeric_limits<double>::max_exponent10 <= numeric_limits<float>::max_exponent10 ||
838e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    val == numeric_limits<float>::infinity() );
839e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
840e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
841e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    stringstream str;
842e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
843e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str << "1e" << numeric_limits<double>::min_exponent10;
844e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(!str.fail());
845e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
846e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    float val;
847e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str >> val;
848e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(!str.fail());
849e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(str.eof());
850e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( numeric_limits<double>::min_exponent10 >= numeric_limits<float>::min_exponent10 ||
851e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    val == 0.0f );
852e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
853e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_NO_LONG_DOUBLE)
854e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
855e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    stringstream str;
856e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
857e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str << "1e" << numeric_limits<long double>::max_exponent10;
858e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(!str.fail());
859e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
860e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    double val;
861e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str >> val;
862e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(!str.fail());
863e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(str.eof());
864e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( numeric_limits<long double>::max_exponent10 <= numeric_limits<double>::max_exponent10 ||
865e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    val == numeric_limits<double>::infinity() );
866e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
867e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
868e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    stringstream str;
869e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
870e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str << "1e" << numeric_limits<long double>::min_exponent10;
871e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(!str.fail());
872e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
873e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    double val;
874e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    str >> val;
875e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(!str.fail());
876e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT(str.eof());
877e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( numeric_limits<long double>::min_exponent10 >= numeric_limits<double>::min_exponent10 ||
878e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                    val == 0.0 );
879e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
880e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
881e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    const char* p = "2.718281828459045235360287471352662497757247093e0";
882e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    std::stringstream s;
883e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << p;
884e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    long double x;
885e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s >> x;
886e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( x > 2.70l && x < 2.72l );
887e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
888e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
889e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
890e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
891e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid NumPutGetTest::num_get_integer()
892e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
893e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //octal input
894e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
895e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream istr;
896e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("30071");
897e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    short val;
898e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> oct >> val;
899e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.fail() );
900e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( istr.eof() );
901e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == 12345 );
902e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
903e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
904e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(short) == 2) {
905e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr.str("177777");
906e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr >> oct >> val;
907e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !istr.fail() );
908e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( istr.eof() );
909e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( val == -1 );
910e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr.clear();
911e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
912e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
913e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
914e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //decimal input
915e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
916e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream istr;
917e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("10000");
918e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    short val = -1;
919e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> val;
920e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.fail() );
921e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( istr.eof() );
922e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == 10000 );
923e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
924e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
925e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("+10000");
926e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    val = -1;
927e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> val;
928e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.fail() );
929e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( istr.eof() );
930e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == 10000 );
931e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
932e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
933e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(short) == 2) {
934e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      val = -1;
935e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr.str("10000000");
936e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr >> val;
937e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( istr.fail() );
938e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( istr.eof() );
939e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( val == -1 );
940e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr.clear();
941e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
942e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
943e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    val = -1;
944e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("0x0");
945e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> val;
946e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.fail() );
947e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.eof() );
948e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == 0 );
949e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
950e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
951e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    val = -1;
952e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("000001");
953e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> val;
954e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.fail() );
955e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( istr.eof() );
956e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == 1 );
957e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
958e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
959e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
960e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //hexadecimal input
961e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
962e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream istr;
963e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("3039");
964e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    short val = -1;
965e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> hex >> val;
966e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.fail() );
967e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( istr.eof() );
968e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == 12345 );
969e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
970e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
971e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("x3039");
972e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    val = -1;
973e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> hex >> val;
974e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( istr.fail() );
975e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.eof() );
976e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == -1 );
977e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
978e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
979e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("03039");
980e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    val = -1;
981e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> hex >> val;
982e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.fail() );
983e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( istr.eof() );
984e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == 12345 );
985e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
986e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
987e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.str("0x3039");
988e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> hex >> val;
989e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !istr.fail() );
990e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( istr.eof() );
991e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( val == 12345 );
992e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr.clear();
993e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
994e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if (sizeof(short) == 2) {
995e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      val = -1;
996e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr.str("cfc7");
997e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr >> hex >> val;
998e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( !istr.fail() );
999e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( istr.eof() );
1000e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( val == -12345 );
1001e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      istr.clear();
1002e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
1003e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1004e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
1005e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1006e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid NumPutGetTest::inhex()
1007e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
1008e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1009e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1010e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << hex << 0;
1011e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( s.str() == "0" );
1012e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1013e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1014e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1015e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << hex << 0xff;
1016e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( s.str() == "ff" );
1017e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1018e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1019e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1020e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << hex << setw( 4 ) << 0xff;
1021e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( s.str() == "  ff" );
1022e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1023e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1024e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1025e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << hex << setw( 4 ) << 0;
1026e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( s.str() == "   0" );
1027e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1028e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1029e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1030e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << hex << showbase << 0;
1031e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( s.str() == "0" );
1032e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1033e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1034e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1035e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << hex << showbase << 0xff;
1036e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( s.str() == "0xff" );
1037e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1038e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1039e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1040e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << hex << showbase << setw( 4 ) << 0xff;
1041e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( s.str() == "0xff" );
1042e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1043e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  { // special case for regression (partially duplicate CHECK_COMPLETE above):
1044e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1045e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s.setf( ios_base::internal, ios_base::adjustfield );
1046e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << hex << showbase << setw(8+2) << 0;
1047e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( s.str() == "         0" );
1048e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1049e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
1050e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1051e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid NumPutGetTest::pointer()
1052e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
1053e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // Problem with printing pointer to null
1054e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1055e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /*
1056e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * Really C's formatting not help here, due to:
1057e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   *
1058e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * p  The argument shall be a pointer to void. The value of
1059e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   *    the pointer is converted to a sequence of printable characters,
1060e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   *    in an implementation-defined manner.
1061e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   */
1062e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1063e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    /*
1064e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char buf[128];
1065e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void *p = (void *)0xff00;
1066e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    sprintf( buf, "%p", p );
1067e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // cerr << buf << endl;
1068e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // Hmmm, I see 0xff00 on box with 32-bits address; pointer like 'unsigned hex'?
1069e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ( sizeof( p ) == 2 ) {
1070e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( strcmp( buf, "0xff00" ) == 0 );
1071e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else if ( sizeof( p ) == 4 ) {
1072e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( strcmp( buf, "0x0000ff00" ) == 0 );
1073e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else if ( sizeof( p ) == 8 ) {
1074e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( strcmp( buf, "0x000000000000ff00" ) == 0 );
1075e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else {
1076e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );
1077e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
1078e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    */
1079e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1080e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1081e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    /*
1082e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char buf[128];
1083e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void *p = 0;
1084e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    */
1085e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // sprintf( buf, "%p", p );
1086e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    /* Cool. "%p" print '(nil)'; "%#x" print '0' */
1087e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // sprintf( buf, "%#x", (unsigned)p );
1088e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    // cerr << buf << endl;
1089e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1090e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1091e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1092e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void *p = (void *)0xff00;
1093e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << p;
1094e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
1095e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ( sizeof( p ) == 2 ) {
1096e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( s.str() == "0xff00" );
1097e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else if ( sizeof( p ) == 4 ) {
1098e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( s.str() == "0x0000ff00" ); // this pass
1099e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else if ( sizeof( p ) == 8 ) {
1100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( s.str() == "0x000000000000ff00" );
1101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else {
1102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );
1103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
1104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
1107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void *p = 0;
1108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << p;
1109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
1110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ( sizeof( p ) == 2 ) {
1111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( s.str() == "0x0000" );
1112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else if ( sizeof( p ) == 4 ) {
1113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( s.str() == "0x00000000" ); // but this will fail, if follow %p
1114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else if ( sizeof( p ) == 8 ) {
1115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_ASSERT( s.str() == "0x0000000000000000" );
1116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else {
1117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( sizeof( p ) == 2 || sizeof( p ) == 4 || sizeof( p ) == 8 );
1118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
1119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
1121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid NumPutGetTest::fix_float_long()
1123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
1124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ostringstream str;
1125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str.setf(ios::fixed, ios::floatfield);
1127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str << 1.0e+5;
1128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( str.str() == "100000.000000" );
1129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  reset_stream(str);
1131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str.precision(0);
1132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str << 1.0e+5;
1133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( str.str() == "100000" );
1134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  reset_stream(str);
1136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str.precision(4);
1137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str << 1.0e+5;
1138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( str.str() == "100000.0000" );
1139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  reset_stream(str);
1141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str.precision(0);
1142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str << 1.0e+83;
1143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream istr( str.str() );
1145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    double f;
1146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> f;
1147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( !istr.fail() );
1148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ( int(numeric_limits<double>::digits10) < 83 ) {
1149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      double delta = 1.0;
1150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      for ( int ee = 83 - int(numeric_limits<double>::digits10); ee > 0; --ee ) {
1151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        delta *= 10.0;
1152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
1153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      // we may loss some digits here, but not more than mantissa:
1154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( (f > (1.0e+83 - delta)) && (f < (1.0e+83 + delta)) );
1155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else {
1156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( check_double(f, 1.0e+83) );
1157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
1158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if 0 // #ifndef _STLP_NO_LONG_DOUBLE
1161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  reset_stream(str);
1162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str.precision(0);
1163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str << 1.0e+83l;
1164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream istr( str.str() );
1166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    long double f;
1167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> f;
1168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( !istr.fail() );
1169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ( int(numeric_limits<long double>::digits10) < 83 ) {
1170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      long double delta = 1.0l;
1171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      for ( int ee = 83 - int(numeric_limits<long double>::digits10); ee > 0; --ee ) {
1172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        delta *= 10.0l;
1173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
1174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      // we may loss some digits here, but not more than mantissa:
1175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      cerr << "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" << endl;
1176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      cerr << str.str() << endl;
1177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      cerr << delta << endl;
1178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      cerr << f << endl;
1179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( (f > (1.0e+83l - delta)) && (f < (1.0e+83l + delta)) );
1180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    } else {
1181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( check_double(f, 1.0e+83l) );
1182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
1183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  reset_stream(str);
1187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str.precision(0);
1188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str << numeric_limits<double>::max();
1189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream istr( str.str() );
1191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    double f;
1192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> f;
1193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( !istr.fail() );
1194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ( int(numeric_limits<double>::digits10) < int(numeric_limits<double>::max_exponent10) ) {
1195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      double delta = 9.0;
1196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      for ( int ee = int(numeric_limits<double>::max_exponent10) - int(numeric_limits<double>::digits10); ee > 0; --ee ) {
1197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        delta *= 10.0;
1198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
1199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      // we may loss some digits here, but not more than mantissa:
1200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( (f > (numeric_limits<double>::max() - delta)) );
1201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
1202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if 0 // #ifndef _STLP_NO_LONG_DOUBLE
1205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  reset_stream(str);
1206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str.precision(0);
1207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  str << numeric_limits<long double>::max();
1208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
1209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream istr( str.str() );
1210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    long double f;
1211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istr >> f;
1212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( !istr.fail() );
1213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    if ( int(numeric_limits<long double>::digits10) < int(numeric_limits<long double>::max_exponent10) ) {
1214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      long double delta = 1.0l;
1215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      for ( int ee = int(numeric_limits<long double>::max_exponent10) - int(numeric_limits<long double>::digits10); ee > 0; --ee ) {
1216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott        delta *= 10.0l;
1217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      }
1218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      // we may loss some digits here, but not more than mantissa:
1219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      CPPUNIT_CHECK( (f > (numeric_limits<long double>::max() - delta)) );
1220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    }
1221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
1222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
1224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass CommaSepNumPunct : public numpunct<char> {
1226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char do_thousands_sep() const { return ','; }
1227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  string do_grouping() const { return string("\1\2\3") + (char)CHAR_MAX; }
1228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
1229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define CHECK2(val, expected) \
1231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  os.str(""); os << fixed << setprecision(3) << showpos << val; \
1232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( os.str() == expected )
1233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid NumPutGetTest::custom_numpunct()
1235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
1236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream os;
1237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    locale loc(os.getloc(), new CommaSepNumPunct());
1238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    os.imbue(loc);
1239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(1, "+1");
1241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(10, "+1,0");
1242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(100, "+10,0");
1243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(1000, "+1,00,0");
1244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(1.234, "+1.234");
1246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(123.456, "+12,3.456");
1247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(1234.567, "+1,23,4.567");
1248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(12345.678, "+12,34,5.678");
1249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(123456.789, "+123,45,6.789");
1250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(1234567.891, "+1,234,56,7.891");
1251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(123456789.123, "+123,456,78,9.123");
1252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CHECK2(100000000000000000000000000000.0, "+100000000000000000000000,000,00,0.000");
1253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(numeric_limits<double>::infinity(), "+inf");
1254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(-1.234, "-1.234");
1256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(-123.456, "-12,3.456");
1257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(-1234.567, "-1,23,4.567");
1258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(-12345.678, "-12,34,5.678");
1259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(-123456.789, "-123,45,6.789");
1260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(-1234567.891, "-1,234,56,7.891");
1261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(-123456789.123, "-123,456,78,9.123");
1262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CHECK2(-100000000000000000000000000000.0, "-100000000000000000000000,000,00,0.000");
1263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CHECK2(-numeric_limits<double>::infinity(), "-inf");
1264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
1265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
1266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1267