#include <fstream>
#include <sstream>
#include <iostream>
#include <testsuite_hooks.h>
class gnu_filebuf: public std::filebuf
{
int i;
public:
gnu_filebuf(int j = 1): i(j) { }
~gnu_filebuf() { --i; }
int get_i() { return i;}
};
const int initial = 4;
gnu_filebuf buf(initial);
void test01()
{
bool test = true;
int k1;
k1 = buf.get_i();
VERIFY( k1 == initial );
{
std::cout.rdbuf(&buf);
}
k1 = buf.get_i();
VERIFY( k1 == initial );
k1 = buf.get_i();
VERIFY( k1 == initial );
{
std::cout.rdbuf(&buf);
std::ios_base::sync_with_stdio(false); }
k1 = buf.get_i();
VERIFY( k1 == initial );
k1 = buf.get_i();
VERIFY( k1 == initial );
{
std::cout.rdbuf(&buf);
std::ios_base::Init make_sure_initialized;
}
k1 = buf.get_i();
VERIFY( k1 == initial );
}
class gnu_ios: public std::basic_ios<char> { };
void test02()
{
bool test = true;
try
{
gnu_ios gios;
}
catch(...)
{
test = false;
}
try
{
std::basic_string<unsigned short> str;
std::basic_ostringstream<unsigned short> oss(str);
oss.put(324);
const unsigned short us[4] = {1246, 433, 520, 0};
oss.write(us, 4);
oss.flush();
}
catch(const std::bad_cast& obj)
{
test = false;
}
catch(...)
{
test = false;
}
VERIFY( test );
}
void test03()
{
using namespace std;
bool test = true;
basic_istringstream<unsigned char> iss_uc;
unsigned char arr[6] = { 'a', 'b', 'c', 'd', 'e' };
try
{
int i;
iss_uc >> i;
}
catch (bad_cast& obj)
{ }
catch (exception& obj)
{ test = false; }
try
{
iss_uc >> arr;
}
catch (bad_cast& obj)
{ }
catch (exception& obj)
{ test = false; }
try
{
iss_uc >> ws;
}
catch (bad_cast& obj)
{ }
catch (exception& obj)
{ test = false; }
try
{
basic_string<unsigned char> s_uc(arr);
iss_uc >> s_uc;
}
catch (bad_cast& obj)
{ }
catch (exception& obj)
{ test = false; }
basic_ostringstream<unsigned char> oss_uc;
try
{
bool b = true;
oss_uc << b;
}
catch (bad_cast& obj)
{ }
catch (exception& obj)
{ test = false; }
VERIFY( test );
}
int test04()
{
std::stringbuf b1;
std::cout.rdbuf( &b1 );
std::cout << "hello\n";
return 0;
}
#if !__GXX_WEAK__
template
std::basic_string<unsigned short>::size_type
std::basic_string<unsigned short>::_Rep::_S_max_size;
template
unsigned short
std::basic_string<unsigned short>::_Rep::_S_terminal;
template
std::basic_string<unsigned char>::size_type
std::basic_string<unsigned char>::_Rep::_S_max_size;
template
unsigned char
std::basic_string<unsigned char>::_Rep::_S_terminal;
#endif
int main()
{
test01();
test02();
test03();
test04();
return 0;
}