ifstream_members.cc [plain text]
#include <istream>
#include <fstream>
#include <testsuite_hooks.h>
const char name_01[] = "ifstream_members-1.tst";
const char name_02[] = "ifstream_members-1.txt";
bool test00()
{
bool test = true;
std::ifstream ifs1;
ifs1.close();
VERIFY( !ifs1.is_open() );
VERIFY( !(ifs1) );
ifs1.open(name_01);
VERIFY( ifs1.is_open() );
VERIFY( !(ifs1) );
VERIFY( ifs1.rdstate() == std::ios_base::failbit );
ifs1.close();
#ifdef DEBUG_ASSERT
assert(test);
#endif
return test;
}
bool test01()
{
bool test = true;
const int more_than_max_open_files = 8200;
for(int i = 0; ++i < more_than_max_open_files;)
{
std::ifstream ifs(name_01);
VERIFY( static_cast<bool>(ifs) );
}
#ifdef DEBUG_ASSERT
assert(test);
#endif
return test;
}
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::filebuf fbuf;
std::streambuf* pbasebuf0 = &fbuf;
std::ifstream sstrm1;
std::filebuf* const buf1 = sstrm1.rdbuf();
std::streambuf* pbasebuf1 = active_buffer(sstrm1);
redirect_buffer(sstrm1, &fbuf);
std::filebuf* const buf2 = sstrm1.rdbuf();
std::streambuf* pbasebuf2 = active_buffer(sstrm1);
VERIFY( buf1 == buf2 );
VERIFY( pbasebuf1 != pbasebuf2 );
VERIFY( pbasebuf2 == pbasebuf0 );
}
int main()
{
test00();
test01();
test02();
return 0;
}