testsuite_io.h (class sync_buf): New, templatized version of sync_streambuf; add typedefs for streambuf/wstreambuf.
2004-12-02 Paolo Carlini <pcarlini@suse.de> * testsuite/testsuite_io.h (class sync_buf): New, templatized version of sync_streambuf; add typedefs for streambuf/wstreambuf. (class fail_buf): Likewise, for fail_streambuf. (class fail_num_get): Templatize and add char/wchar_t typedefs. (class fail_num_put): Likewise. * testsuite/27_io/basic_istream/extractors_arithmetic/char/ exceptions_badbit_throw.cc: Use the latter. * testsuite/27_io/basic_istream/extractors_arithmetic/char/ exceptions_failbit_throw.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_arithmetic/char/ exceptions_badbit_throw.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_arithmetic/char/ exceptions_failbit_throw.cc: Likewise. From-SVN: r91635
This commit is contained in:
parent
1afffb0073
commit
9b8d9ac39f
|
@ -1,3 +1,19 @@
|
||||||
|
2004-12-02 Paolo Carlini <pcarlini@suse.de>
|
||||||
|
|
||||||
|
* testsuite/testsuite_io.h (class sync_buf): New, templatized
|
||||||
|
version of sync_streambuf; add typedefs for streambuf/wstreambuf.
|
||||||
|
(class fail_buf): Likewise, for fail_streambuf.
|
||||||
|
(class fail_num_get): Templatize and add char/wchar_t typedefs.
|
||||||
|
(class fail_num_put): Likewise.
|
||||||
|
* testsuite/27_io/basic_istream/extractors_arithmetic/char/
|
||||||
|
exceptions_badbit_throw.cc: Use the latter.
|
||||||
|
* testsuite/27_io/basic_istream/extractors_arithmetic/char/
|
||||||
|
exceptions_failbit_throw.cc: Likewise.
|
||||||
|
* testsuite/27_io/basic_ostream/inserters_arithmetic/char/
|
||||||
|
exceptions_badbit_throw.cc: Likewise.
|
||||||
|
* testsuite/27_io/basic_ostream/inserters_arithmetic/char/
|
||||||
|
exceptions_failbit_throw.cc: Likewise.
|
||||||
|
|
||||||
2004-12-01 Paolo Carlini <pcarlini@suse.de>
|
2004-12-01 Paolo Carlini <pcarlini@suse.de>
|
||||||
|
|
||||||
* testsuite/27_io/basic_istream/get/wchar_t/1.cc: New.
|
* testsuite/27_io/basic_istream/get/wchar_t/1.cc: New.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// 2003-03-08 Jerry Quinn <jlquinn@optonline.net>
|
// 2003-03-08 Jerry Quinn <jlquinn@optonline.net>
|
||||||
|
|
||||||
// Copyright (C) 2003 Free Software Foundation, Inc.
|
// Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||||
//
|
//
|
||||||
// This file is part of the GNU ISO C++ Library. This library is free
|
// This file is part of the GNU ISO C++ Library. This library is free
|
||||||
// software; you can redistribute it and/or modify it under the
|
// software; you can redistribute it and/or modify it under the
|
||||||
|
@ -30,7 +30,7 @@ void test_badbit()
|
||||||
using namespace std;
|
using namespace std;
|
||||||
bool test __attribute__((unused)) = true;
|
bool test __attribute__((unused)) = true;
|
||||||
|
|
||||||
locale loc(locale::classic(), new __gnu_test::fail_num_get);
|
locale loc(locale::classic(), new __gnu_test::fail_num_get_char);
|
||||||
istringstream stream("jaylib - champion sound");
|
istringstream stream("jaylib - champion sound");
|
||||||
stream.imbue(loc);
|
stream.imbue(loc);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
// Copyright (C) 2003
|
// Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
||||||
// Free Software Foundation, Inc.
|
|
||||||
//
|
//
|
||||||
// This file is part of the GNU ISO C++ Library. This library is free
|
// This file is part of the GNU ISO C++ Library. This library is free
|
||||||
// software; you can redistribute it and/or modify it under the
|
// software; you can redistribute it and/or modify it under the
|
||||||
|
@ -37,7 +36,7 @@ void test_failbit()
|
||||||
using namespace std;
|
using namespace std;
|
||||||
bool test __attribute__((unused)) = true;
|
bool test __attribute__((unused)) = true;
|
||||||
|
|
||||||
locale loc(locale::classic(), new __gnu_test::fail_num_get);
|
locale loc(locale::classic(), new __gnu_test::fail_num_get_char);
|
||||||
istringstream stream("jaylib - champion sound");
|
istringstream stream("jaylib - champion sound");
|
||||||
stream.imbue(loc);
|
stream.imbue(loc);
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ void test_badbit()
|
||||||
using namespace std;
|
using namespace std;
|
||||||
bool test __attribute__((unused)) = true;
|
bool test __attribute__((unused)) = true;
|
||||||
|
|
||||||
locale loc(locale::classic(), new __gnu_test::fail_num_put);
|
locale loc(locale::classic(), new __gnu_test::fail_num_put_char);
|
||||||
ostringstream stream("jaylib - champion sound");
|
ostringstream stream("jaylib - champion sound");
|
||||||
stream.imbue(loc);
|
stream.imbue(loc);
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ void test_failbit()
|
||||||
using namespace std;
|
using namespace std;
|
||||||
bool test __attribute__((unused)) = true;
|
bool test __attribute__((unused)) = true;
|
||||||
|
|
||||||
locale loc(locale::classic(), new __gnu_test::fail_num_put);
|
locale loc(locale::classic(), new __gnu_test::fail_num_put_char);
|
||||||
ostringstream stream("jaylib - champion sound");
|
ostringstream stream("jaylib - champion sound");
|
||||||
stream.imbue(loc);
|
stream.imbue(loc);
|
||||||
|
|
||||||
|
|
|
@ -103,189 +103,225 @@ namespace __gnu_test
|
||||||
// Used to check if basic_streambuf::pubsync() has been called.
|
// Used to check if basic_streambuf::pubsync() has been called.
|
||||||
// This is useful for checking if a function creates [io]stream::sentry
|
// This is useful for checking if a function creates [io]stream::sentry
|
||||||
// objects, since the sentry constructors call tie()->flush().
|
// objects, since the sentry constructors call tie()->flush().
|
||||||
class sync_streambuf : public std::streambuf
|
template<typename T>
|
||||||
{
|
class sync_buf
|
||||||
private:
|
: public T
|
||||||
bool m_sync_called;
|
|
||||||
|
|
||||||
public:
|
|
||||||
sync_streambuf()
|
|
||||||
: m_sync_called(false)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
bool sync_called() const
|
|
||||||
{ return m_sync_called; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
int sync()
|
|
||||||
{
|
{
|
||||||
m_sync_called = true;
|
private:
|
||||||
return 0;
|
bool m_sync_called;
|
||||||
}
|
|
||||||
};
|
public:
|
||||||
|
sync_buf()
|
||||||
|
: m_sync_called(false)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
bool sync_called() const
|
||||||
|
{ return m_sync_called; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int sync()
|
||||||
|
{
|
||||||
|
m_sync_called = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef sync_buf<std::streambuf> sync_streambuf;
|
||||||
|
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||||
|
typedef sync_buf<std::wstreambuf> sync_wstreambuf;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Throws on all overflow and underflow calls.
|
// Throws on all overflow and underflow calls.
|
||||||
struct underflow_error: std::exception { };
|
struct underflow_error: std::exception { };
|
||||||
struct overflow_error: std::exception { };
|
struct overflow_error: std::exception { };
|
||||||
struct positioning_error: std::exception { };
|
struct positioning_error: std::exception { };
|
||||||
|
|
||||||
struct fail_streambuf : std::streambuf
|
template<typename T>
|
||||||
{
|
struct fail_buf
|
||||||
private:
|
: public T
|
||||||
char p[2];
|
|
||||||
|
|
||||||
public:
|
|
||||||
fail_streambuf()
|
|
||||||
{
|
{
|
||||||
p[0] = 's';
|
typedef typename T::char_type char_type;
|
||||||
p[1] = char();
|
typedef typename T::int_type int_type;
|
||||||
setg(p, p, p + 1);
|
typedef typename T::off_type off_type;
|
||||||
}
|
typedef typename T::pos_type pos_type;
|
||||||
|
|
||||||
virtual int_type underflow()
|
private:
|
||||||
{
|
char_type p[2];
|
||||||
throw underflow_error();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual int_type uflow()
|
|
||||||
{
|
|
||||||
throw underflow_error();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual int_type
|
public:
|
||||||
overflow(int_type)
|
fail_buf()
|
||||||
{
|
{
|
||||||
throw overflow_error();
|
p[0] = char_type('s');
|
||||||
return -1;
|
p[1] = char_type();
|
||||||
}
|
setg(p, p, p + 1);
|
||||||
|
}
|
||||||
|
|
||||||
virtual pos_type
|
virtual int_type underflow()
|
||||||
seekoff(off_type, std::ios_base::seekdir, std::ios_base::openmode)
|
{
|
||||||
{
|
throw underflow_error();
|
||||||
throw positioning_error();
|
return -1;
|
||||||
return pos_type(off_type(-1));
|
}
|
||||||
}
|
|
||||||
|
virtual int_type uflow()
|
||||||
virtual pos_type
|
{
|
||||||
seekpos(pos_type, std::ios_base::openmode)
|
throw underflow_error();
|
||||||
{
|
return -1;
|
||||||
throw positioning_error();
|
}
|
||||||
return pos_type(off_type(-1));
|
|
||||||
}
|
virtual int_type
|
||||||
|
overflow(int_type)
|
||||||
|
{
|
||||||
|
throw overflow_error();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual pos_type
|
||||||
|
seekoff(off_type, std::ios_base::seekdir, std::ios_base::openmode)
|
||||||
|
{
|
||||||
|
throw positioning_error();
|
||||||
|
return pos_type(off_type(-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual pos_type
|
||||||
|
seekpos(pos_type, std::ios_base::openmode)
|
||||||
|
{
|
||||||
|
throw positioning_error();
|
||||||
|
return pos_type(off_type(-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int
|
||||||
|
sync()
|
||||||
|
{
|
||||||
|
throw positioning_error();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
virtual int
|
typedef fail_buf<std::streambuf> fail_streambuf;
|
||||||
sync()
|
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||||
{
|
typedef fail_buf<std::wstreambuf> fail_wstreambuf;
|
||||||
throw positioning_error();
|
#endif
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Facets that throw an exception for every virtual function.
|
// Facets that throw an exception for every virtual function.
|
||||||
struct facet_error: std::exception { };
|
struct facet_error: std::exception { };
|
||||||
|
|
||||||
class fail_num_get : public std::num_get<char>
|
template<typename T>
|
||||||
{
|
class fail_num_get
|
||||||
typedef std::ios_base ios_base;
|
: public std::num_get<T>
|
||||||
|
{
|
||||||
|
typedef std::ios_base ios_base;
|
||||||
|
typedef typename std::num_get<T>::iter_type iter_type;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
iter_type
|
iter_type
|
||||||
do_get(iter_type a, iter_type, ios_base&, ios_base::iostate&, bool&) const
|
do_get(iter_type a, iter_type, ios_base&, ios_base::iostate&, bool&) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, long&) const
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, long&) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
unsigned short&) const
|
unsigned short&) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
unsigned int&) const
|
unsigned int&) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
unsigned long&) const
|
unsigned long&) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
#ifdef _GLIBCXX_USE_LONG_LONG
|
#ifdef _GLIBCXX_USE_LONG_LONG
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
long long&) const
|
long long&) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
unsigned long long&) const
|
unsigned long long&) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
float&) const
|
float&) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
|
virtual iter_type
|
||||||
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
|
double&) const
|
||||||
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
|
virtual iter_type
|
||||||
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
|
long double&) const
|
||||||
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
|
||||||
|
virtual iter_type
|
||||||
|
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
||||||
|
void*&) const
|
||||||
|
{ throw facet_error(); return iter_type(); }
|
||||||
|
};
|
||||||
|
|
||||||
virtual iter_type
|
typedef fail_num_get<char> fail_num_get_char;
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||||
double&) const
|
typedef fail_num_get<wchar_t> fail_num_get_wchar_t;
|
||||||
{ throw facet_error(); return iter_type(); }
|
#endif
|
||||||
|
|
||||||
virtual iter_type
|
template<typename T>
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
class fail_num_put
|
||||||
long double&) const
|
: public std::num_put<T>
|
||||||
{ throw facet_error(); return iter_type(); }
|
{
|
||||||
|
typedef std::ios_base ios_base;
|
||||||
|
typedef typename std::num_put<T>::iter_type iter_type;
|
||||||
|
typedef typename std::num_put<T>::char_type char_type;
|
||||||
|
|
||||||
virtual iter_type
|
protected:
|
||||||
do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
|
iter_type
|
||||||
void*&) const
|
do_put(iter_type, ios_base&, char_type __fill, bool __v) const
|
||||||
{ throw facet_error(); return iter_type(); }
|
{ throw facet_error(); return iter_type(NULL); }
|
||||||
};
|
|
||||||
|
virtual iter_type
|
||||||
|
do_put(iter_type, ios_base&, char_type __fill, long __v) const
|
||||||
|
{ throw facet_error(); return iter_type(NULL); }
|
||||||
|
|
||||||
class fail_num_put : public std::num_put<char>
|
virtual iter_type
|
||||||
{
|
do_put(iter_type, ios_base&, char_type __fill, unsigned long) const
|
||||||
typedef std::ios_base ios_base;
|
{ throw facet_error(); return iter_type(NULL); }
|
||||||
|
|
||||||
protected:
|
|
||||||
iter_type
|
|
||||||
do_put(iter_type, ios_base&, char_type __fill, bool __v) const
|
|
||||||
{ throw facet_error(); return iter_type(NULL); }
|
|
||||||
|
|
||||||
virtual iter_type
|
|
||||||
do_put(iter_type, ios_base&, char_type __fill, long __v) const
|
|
||||||
{ throw facet_error(); return iter_type(NULL); }
|
|
||||||
|
|
||||||
virtual iter_type
|
|
||||||
do_put(iter_type, ios_base&, char_type __fill, unsigned long) const
|
|
||||||
{ throw facet_error(); return iter_type(NULL); }
|
|
||||||
|
|
||||||
#ifdef _GLIBCXX_USE_LONG_LONG
|
#ifdef _GLIBCXX_USE_LONG_LONG
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_put(iter_type, ios_base&, char_type __fill, long long __v) const
|
do_put(iter_type, ios_base&, char_type __fill, long long __v) const
|
||||||
{ throw facet_error(); return iter_type(NULL); }
|
{ throw facet_error(); return iter_type(NULL); }
|
||||||
|
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_put(iter_type, ios_base&, char_type __fill, unsigned long long) const
|
do_put(iter_type, ios_base&, char_type __fill, unsigned long long) const
|
||||||
{ throw facet_error(); return iter_type(NULL); }
|
{ throw facet_error(); return iter_type(NULL); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
virtual iter_type
|
||||||
|
do_put(iter_type, ios_base&, char_type __fill, double __v) const
|
||||||
|
{ throw facet_error(); return iter_type(NULL); }
|
||||||
|
|
||||||
virtual iter_type
|
virtual iter_type
|
||||||
do_put(iter_type, ios_base&, char_type __fill, double __v) const
|
do_put(iter_type, ios_base&, char_type __fill, long double __v) const
|
||||||
{ throw facet_error(); return iter_type(NULL); }
|
{ throw facet_error(); return iter_type(NULL); }
|
||||||
|
|
||||||
|
virtual iter_type
|
||||||
|
do_put(iter_type, ios_base&, char_type __fill, const void* __v) const
|
||||||
|
{ throw facet_error(); return iter_type(NULL); }
|
||||||
|
};
|
||||||
|
|
||||||
virtual iter_type
|
typedef fail_num_put<char> fail_num_put_char;
|
||||||
do_put(iter_type, ios_base&, char_type __fill, long double __v) const
|
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||||
{ throw facet_error(); return iter_type(NULL); }
|
typedef fail_num_put<wchar_t> fail_num_put_wchar_t;
|
||||||
|
#endif
|
||||||
virtual iter_type
|
|
||||||
do_put(iter_type, ios_base&, char_type __fill, const void* __v) const
|
|
||||||
{ throw facet_error(); return iter_type(NULL); }
|
|
||||||
};
|
|
||||||
}; // namespace __gnu_test
|
}; // namespace __gnu_test
|
||||||
|
|
||||||
#endif // _GLIBCXX_TESTSUITE_IO_H
|
#endif // _GLIBCXX_TESTSUITE_IO_H
|
||||||
|
|
Loading…
Reference in New Issue