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