1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <string>
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "math_aux.h"
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || !defined (_STLP_USE_NO_IOSTREAMS)
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <sstream>
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include <memory>
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include "full_streambuf.h"
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  include "cppunit/cppunit_proxy.h"
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std;
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass SstreamTest : public CPPUNIT_NS::TestCase
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE(SstreamTest);
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(output);
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(input);
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(input_char);
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(io);
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(err);
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(err_long);
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(maxint);
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(init_in);
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(init_out);
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(buf);
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(rdbuf);
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(streambuf_output);
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(seek);
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(seekp);
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(seek_gp);
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(tellp);
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(negative);
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE_END();
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  protected:
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void output();
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void input();
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void input_char();
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void io();
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void err();
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void err_long();
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void maxint();
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void init_in();
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void init_out();
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void buf();
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void rdbuf();
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void streambuf_output();
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void seek();
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void seekp();
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void seek_gp();
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void tellp();
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void negative();
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(SstreamTest);
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::output()
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << 1 << '\n' << 2.0 << '\n' << "abcd\n" << "ghk lm\n" << "abcd ef";
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.str() == "1\n2\nabcd\nghk lm\nabcd ef" );
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //Following tests are mostly used to reveal problem with the MSVC /Wp64 option
77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  //used to track 64 bits portability issue:
78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    size_t i = 0;
81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << i;
82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.str() == "0" );
84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream s;
87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ptrdiff_t i = 0;
88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s << i;
89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
90e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.str() == "0" );
91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
94e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::input()
95e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
96e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
97e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream s( "1\n2\nabcd\nghk lm\nabcd ef" );
98e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    int i = 0;
99e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s >> i;
100e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
101e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( i == 1 );
102e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    double d = 0.0;
103e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s >> d;
104e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
105e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( d == 2.0 );
106e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    string str;
107e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s >> str;
108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
109e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( str == "abcd" );
110e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    char c;
111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s.get(c); // extract newline, that not extracted by operator >>
112e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
113e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( c == '\n' );
114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    getline( s, str );
115e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.good() );
116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( str == "ghk lm" );
117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    getline( s, str );
118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.eof() );
119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( str == "abcd ef" );
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream s("0");
123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    size_t i = 1;
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    s >> i;
125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( !s.fail() );
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( s.eof() );
127e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( i == 0 );
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
129e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
131e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::input_char()
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
133e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char buf[16] = { 0, '1', '2', '3' };
134e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istringstream s( "0" );
135e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> buf;
136e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
137e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[0] == '0' );
138e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[1] == 0 );
139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[2] == '2' );
140e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
141e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
142e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
143e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::io()
144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
145e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  stringstream s;
146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s << 1 << '\n' << 2.0 << '\n' << "abcd\n" << "ghk lm\n" << "abcd ef";
147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.good() );
148e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
149e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int i = 0;
150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> i;
151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( i == 1 );
152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.good() );
153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  double d = 0.0;
154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> d;
155e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( d == 2.0 );
156e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.good() );
157e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  string str;
158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> str;
159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( str == "abcd" );
160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.good() );
161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char c;
162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s.get(c); // extract newline, that not extracted by operator >>
163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.good() );
164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( c == '\n' );
165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  getline( s, str );
166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.good() );
167e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( str == "ghk lm" );
168e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  getline( s, str );
169e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( str == "abcd ef" );
170e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.eof() );
171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::err()
174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  stringstream s( "9" );
176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int i = 0;
178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> i;
179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !s.fail() );
180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( i == 9 );
181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> i;
182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.fail() );
183e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.eof() );
184e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( i == 9 );
185e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
186e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
187e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::err_long()
188e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
189e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  stringstream s( "9" );
190e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
191e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  long i = 0;
192e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> i;
193e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !s.fail() );
194e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( i == 9 );
195e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> i;
196e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.fail() );
197e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.eof() );
198e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( i == 9 );
199e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
200e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
201e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::maxint()
202e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
203e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  stringstream s;
204e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
205e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s << INT_MAX << " " << UINT_MAX << " " << LONG_MAX << " " << ULONG_MAX << " "
206e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    << INT_MIN << " " << LONG_MIN;
207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.good() );
208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int i = 0;
210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  unsigned int u = 0;
211e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  long l = 0;
212e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  unsigned long ul = 0;
213e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
214e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> i >> u >> l >> ul;
215e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.good() );
216e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( i == INT_MAX );
217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( u == UINT_MAX );
218e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( l == LONG_MAX );
219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( ul == ULONG_MAX );
220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s >> i >> l;
222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !s.fail() );
223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( i == INT_MIN );
224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( l == LONG_MIN );
225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
226e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
227e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::init_in()
228e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
229e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istringstream is( "12345" );
230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  int n;
231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  is >> n;
233e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !is.fail() );
234e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( n == 12345 );
235e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
236e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istringstream dis( "1.2345" );
237e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  double d;
238e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
239e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  dis >> d;
240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !dis.fail() );
241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( are_equals(d, 1.2345) );
242e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
243e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istringstream fis( "1.2345" );
244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  float f;
245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
246e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  fis >> f;
247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !fis.fail() );
248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( are_equals(f, 1.2345f) );
249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
251e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::init_out()
252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ostringstream os( "12345" );
254e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( os.str() == "12345" );
255e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  os << 67;
257e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( os.good() );
258e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
259e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // This satisfy to the Standard:
260e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // CPPUNIT_ASSERT( os.str() == "67345" );
261e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // But we don't know the reason, why standard state that.
262e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /*
264e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * 27.7.1.1: ... then copies the content of str into the basic_sringbuf
265e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * underlying character sequence and initializes the input and output
266e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * sequences according to which. If which & ios_base::out is true, initializes
267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * the output sequence with underlying sequence. ...
268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   *
269e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * I can treat this as 'like output was performed', and then I should bump
270e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   * put pointer... Looks like more useful then my previous treatment.
271e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   *
272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   *          - ptr
273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   */
274e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
275e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( os.str() == "1234567" );
276e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
277e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
278e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  os.str( "89ab" );
279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( os.str() == "89ab" );
280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  os << 10;
282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( os.good() );
283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // CPPUNIT_ASSERT( os.str() == "10ab" );
284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( os.str() == "89ab10" );
285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::buf()
288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  stringstream ss;
290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss << "1234567\n89\n";
292e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char buf[10];
293e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  buf[7] = 'x';
294e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss.get( buf, 10 );
295e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !ss.fail() );
296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[0] == '1' );
297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[1] == '2' );
298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[2] == '3' );
299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[3] == '4' );
300e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[4] == '5' );
301e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[5] == '6' );
302e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[6] == '7' ); // 27.6.1.3 paragraph 10, paragraph 7
303e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( buf[7] == 0 ); // 27.6.1.3 paragraph 8
304e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char c;
305e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss.get(c);
306e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !ss.fail() );
307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( c == '\n' ); // 27.6.1.3 paragraph 10, paragraph 7
308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss.get(c);
309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !ss.fail() );
310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( c == '8' );
311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
313e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::rdbuf()
314e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
315e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  stringstream ss;
316e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss << "1234567\n89\n";
318e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
319e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ostringstream os;
320e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss.get( *os.rdbuf(), '\n' );
321e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !ss.fail() );
322e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char c;
323e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss.get(c);
324e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( !ss.fail() );
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( c == '\n' ); // 27.6.1.3 paragraph 12
326e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( os.str() == "1234567" );
327e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
328e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
329e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::streambuf_output()
330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream in("01234567890123456789");
333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( in );
334e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
335e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    full_streambuf full_buf(10);
336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostream out(&full_buf);
337e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( out );
338e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    out << in.rdbuf();
340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( out );
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( in );
342e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //out is good we can check what has been extracted:
343e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( full_buf.str() == "0123456789" );
344e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
345e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    out << in.rdbuf();
346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( out.fail() );
347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( in );
348e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream ostr;
350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostr << in.rdbuf();
351e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ostr );
352e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( in );
353e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ostr.str() == "0123456789" );
354e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
356e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined (STLPORT) || defined (_STLP_USE_EXCEPTIONS)
357e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
358e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //If the output stream buffer throws:
359e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    istringstream in("01234567890123456789");
360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( in );
361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    full_streambuf full_buf(10, true);
363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostream out(&full_buf);
364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( out );
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    out << in.rdbuf();
367e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( out.bad() );
368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( in );
369e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //out is bad we have no guaranty on what has been extracted:
370e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    //CPPUNIT_ASSERT( full_buf.str() == "0123456789" );
371e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
372e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    out.clear();
373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    out << in.rdbuf();
374e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( out.fail() && out.bad() );
375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( in );
376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream ostr;
378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostr << in.rdbuf();
379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ostr );
380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( in );
381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_ASSERT( ostr.str() == "01234567890123456789" );
382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
383e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::seek()
387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
388e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  stringstream s( "0123456789" );
389e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
390e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.tellg() == stringstream::pos_type(0) );
391e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s.seekg( 6, ios::beg );
392e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.tellg() == stringstream::pos_type(6) );
393e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s.seekg( -3, ios::cur );
394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( s.tellg() == stringstream::pos_type(3) );
395e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
396e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  istringstream is( "0123456789" );
397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( is.tellg() == stringstream::pos_type(0) );
398e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  is.seekg( 6, ios::beg );
399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( is.tellg() == stringstream::pos_type(6) );
400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  is.seekg( -3, ios::cur );
401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_ASSERT( is.tellg() == stringstream::pos_type(3) );
402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
403e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
404e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::seekp()
405e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ostringstream s;
407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s << "1234567";
409e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( s.tellp() == stringstream::pos_type(7) );
410e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( s.str() == "1234567" );
411e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s.seekp( 0 );
412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s << "X";
413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( s.str() == "X234567" );
414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s.seekp( 0, ios::beg );
415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  s << "Y";
416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( s.str() == "Y234567" );
417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
418e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::seek_gp()
420e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  stringstream ss( "1" );
422e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
423e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /* ISO/IEC 14882 2003 (and 1998 too) assume change as get as put positions
424e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott     with seekg and seekp (27.6.1.3, par 38; 27.6.2.4 par 2),
425e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott     but this contradict to common practice and proposed draft N2588
426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott     (27.6.1.3, par 41; 27.6.2.5, par 4)
427e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott     Now STLport implement (i.e. change behaviour ) the draft's point of view.
429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott   */
430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss.seekg( 0, ios::beg );
432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss.seekp( 0, ios::end );
433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
434e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss << "2";
435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  string str;
437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ss >> str;
439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  /*  CPPUNIT_CHECK( str == "2" ); --- according ISO/IEC 14882 2003 */
441e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( str == "12" );
442e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
443e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
444e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::tellp()
445e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
446e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
447e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream o( "1" );
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    o << "23456";
450e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
451e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == stringstream::pos_type(6) );
452e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( o.tellp() == stringstream::pos_type(6) );
453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream o;
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    o << "123456";
458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == stringstream::pos_type(6) );
460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( o.tellp() == stringstream::pos_type(6) );
461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  {
463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    ostringstream o( "1" );
464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    o << "23456789";
466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( o.rdbuf()->pubseekoff( 0, ios_base::cur, ios_base::out ) == stringstream::pos_type(9) );
468e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    CPPUNIT_CHECK( o.tellp() == stringstream::pos_type(9) );
469e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
470e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate < class T >
474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottstring to_string( const T& v )
475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
476e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  ostringstream oss;
477e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  oss << v;
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  return oss.str();
479e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid SstreamTest::negative()
482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( to_string<int>(-1) == "-1" );
484e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( to_string<long>(-1) == "-1" );
485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
486e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
488