stringstream_members.cc [plain text]
#include <sstream>
#include <testsuite_hooks.h>
void test01()
{
bool test = true;
std::stringstream is01;
const std::string str00;
const std::string str01 = "123";
std::string str02;
const int i01 = 123;
int a,b;
std::ios_base::iostate state1, state2, statefail, stateeof;
statefail = std::ios_base::failbit;
stateeof = std::ios_base::eofbit;
str02 = is01.str();
VERIFY( str00 == str02 );
is01.str(str01);
str02 = is01.str();
VERIFY( str01 == str02 );
state1 = is01.rdstate();
is01 >> a;
state2 = is01.rdstate();
VERIFY( a = i01 );
VERIFY( state1 != state2 );
VERIFY( state2 == stateeof );
is01.str(str01);
is01 >> b;
VERIFY( b != a );
is01.clear();
state1 = is01.rdstate();
is01 >> b;
state2 = is01.rdstate();
VERIFY( b == a );
VERIFY( state1 != state2 );
VERIFY( state2 == stateeof );
#ifdef DEBUG_ASSERT
assert(test);
#endif
}
void
redirect_buffer(std::ios& stream, std::streambuf* new_buf)
{ stream.rdbuf(new_buf); }
std::streambuf*
active_buffer(std::ios& stream)
{ return stream.rdbuf(); }
void test02()
{
bool test = true;
const char* strlit01 = "fuck war";
const char* strlit02 = "two less cars abstract riot crew, critical mass/SF";
const std::string str00;
const std::string str01(strlit01);
std::string str02;
std::stringbuf sbuf(str01);
std::streambuf* pbasebuf0 = &sbuf;
std::stringstream sstrm1;
VERIFY( sstrm1.str() == str00 );
std::stringbuf* const buf1 = sstrm1.rdbuf();
std::streambuf* pbasebuf1 = active_buffer(sstrm1);
redirect_buffer(sstrm1, &sbuf);
std::stringbuf* const buf2 = sstrm1.rdbuf();
std::streambuf* pbasebuf2 = active_buffer(sstrm1);
VERIFY( buf1 == buf2 );
VERIFY( pbasebuf1 != pbasebuf2 );
VERIFY( pbasebuf2 == pbasebuf0 );
VERIFY( sstrm1.str() != str01 );
VERIFY( sstrm1.str() == str00 );
std::stringbuf* psbuf = dynamic_cast<std::stringbuf*>(pbasebuf2);
str02 = psbuf->str();
VERIFY( str02 == str01 );
}
void
test03()
{
bool test = true;
int i = 1024;
int *pi = &i;
double d = 3.14159;
double *pd = &d;
std::string blank;
std::ostringstream ostrst01;
std::ostringstream ostrst02(blank);
ostrst01 << "i: " << i << " i's address: " << pi << "\n"
<< "d: " << d << " d's address: " << pd << std::endl;
ostrst02 << "i: " << i << " i's address: " << pi << "\n"
<< "d: " << d << " d's address: " << pd << std::endl;
std::string msg01 = ostrst01.str();
std::string msg02 = ostrst02.str();
VERIFY( msg01 == msg02 );
VERIFY( msg02 != blank );
#if 0
int i2 = 0;
void* pi2 = &i2;
double d2 = 0.0;
void* pd2 = &d2;
std::istringstream istrst01(ostrst02.str());
istrst01 >> i2 >> pi2 >> d2 >> pd2;
VERIFY( i2 == i );
VERIFY( d2 == d );
VERIFY( pd2 == pd );
VERIFY( pi2 == pi );
#endif
std::string str1("");
std::string str3("this is a somewhat string");
std::stringstream ss1(str1, std::ios_base::in|std::ios_base::out);
std::stringstream ss2(str3, std::ios_base::in|std::ios_base::out);
}
void test04()
{
bool test = true;
const char* strlit00 = "orvieto";
const std::string str00 = strlit00;
std::ostringstream oss;
oss.str(str00);
oss << "cortona";
VERIFY( str00 == strlit00 );
}
int main()
{
test01();
test02();
test03();
test04();
return 0;
}