aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libstdc++-v3/ChangeLog16
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc5
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc2
-rw-r--r--libstdc++-v3/testsuite/testsuite_io.h336
6 files changed, 208 insertions, 157 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 7768163..5ea2e14 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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>
* testsuite/27_io/basic_istream/get/wchar_t/1.cc: New.
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
index f7c43e2..5bb89ad 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
@@ -1,6 +1,6 @@
// 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
// software; you can redistribute it and/or modify it under the
@@ -30,7 +30,7 @@ void test_badbit()
using namespace std;
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");
stream.imbue(loc);
diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
index 0b223bc..3b20869 100644
--- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
@@ -1,5 +1,4 @@
-// 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
// software; you can redistribute it and/or modify it under the
@@ -37,7 +36,7 @@ void test_failbit()
using namespace std;
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");
stream.imbue(loc);
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
index 32ff029..9fb887e 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
@@ -30,7 +30,7 @@ void test_badbit()
using namespace std;
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");
stream.imbue(loc);
diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
index 6b3b77d..88ed30e 100644
--- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
@@ -37,7 +37,7 @@ void test_failbit()
using namespace std;
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");
stream.imbue(loc);
diff --git a/libstdc++-v3/testsuite/testsuite_io.h b/libstdc++-v3/testsuite/testsuite_io.h
index 809d080..14f5cb4 100644
--- a/libstdc++-v3/testsuite/testsuite_io.h
+++ b/libstdc++-v3/testsuite/testsuite_io.h
@@ -103,189 +103,225 @@ namespace __gnu_test
// Used to check if basic_streambuf::pubsync() has been called.
// This is useful for checking if a function creates [io]stream::sentry
// objects, since the sentry constructors call tie()->flush().
- class sync_streambuf : public std::streambuf
- {
- private:
- bool m_sync_called;
+ template<typename T>
+ class sync_buf
+ : public T
+ {
+ private:
+ bool m_sync_called;
- public:
- sync_streambuf()
- : m_sync_called(false)
- { }
+ public:
+ sync_buf()
+ : m_sync_called(false)
+ { }
+
+ bool sync_called() const
+ { return m_sync_called; }
- bool sync_called() const
- { return m_sync_called; }
+ protected:
+ int sync()
+ {
+ m_sync_called = true;
+ return 0;
+ }
+ };
- 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.
struct underflow_error: std::exception { };
struct overflow_error: std::exception { };
struct positioning_error: std::exception { };
- struct fail_streambuf : std::streambuf
- {
- private:
- char p[2];
-
- public:
- fail_streambuf()
+ template<typename T>
+ struct fail_buf
+ : public T
{
- p[0] = 's';
- p[1] = char();
- setg(p, p, p + 1);
- }
+ typedef typename T::char_type char_type;
+ typedef typename T::int_type int_type;
+ typedef typename T::off_type off_type;
+ typedef typename T::pos_type pos_type;
- virtual int_type underflow()
- {
- throw underflow_error();
- return -1;
- }
-
- virtual int_type uflow()
- {
- throw underflow_error();
- return -1;
- }
+ private:
+ char_type p[2];
- virtual int_type
- overflow(int_type)
- {
- throw overflow_error();
- return -1;
- }
+ public:
+ fail_buf()
+ {
+ p[0] = char_type('s');
+ p[1] = char_type();
+ setg(p, p, p + 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_type underflow()
+ {
+ throw underflow_error();
+ return -1;
+ }
+
+ virtual int_type uflow()
+ {
+ throw underflow_error();
+ return -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
- sync()
- {
- throw positioning_error();
- return 0;
- }
- };
+ typedef fail_buf<std::streambuf> fail_streambuf;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef fail_buf<std::wstreambuf> fail_wstreambuf;
+#endif
// Facets that throw an exception for every virtual function.
struct facet_error: std::exception { };
- class fail_num_get : public std::num_get<char>
- {
- typedef std::ios_base ios_base;
-
- protected:
- iter_type
- do_get(iter_type a, iter_type, ios_base&, ios_base::iostate&, bool&) const
- { throw facet_error(); return iter_type(); }
-
- virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, long&) const
- { throw facet_error(); return iter_type(); }
-
- virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
- unsigned short&) const
- { throw facet_error(); return iter_type(); }
+ template<typename T>
+ class fail_num_get
+ : public std::num_get<T>
+ {
+ typedef std::ios_base ios_base;
+ typedef typename std::num_get<T>::iter_type iter_type;
- virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
- unsigned int&) const
- { throw facet_error(); return iter_type(); }
+ protected:
+ iter_type
+ do_get(iter_type a, iter_type, ios_base&, ios_base::iostate&, bool&) const
+ { throw facet_error(); return iter_type(); }
- virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
- unsigned long&) const
- { throw facet_error(); return iter_type(); }
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, long&) const
+ { throw facet_error(); return iter_type(); }
+
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ unsigned short&) const
+ { throw facet_error(); return iter_type(); }
+
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ unsigned int&) const
+ { throw facet_error(); return iter_type(); }
+
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ unsigned long&) const
+ { throw facet_error(); return iter_type(); }
#ifdef _GLIBCXX_USE_LONG_LONG
- virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
- long long&) const
- { throw facet_error(); return iter_type(); }
-
- virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
- unsigned long long&) const
- { throw facet_error(); return iter_type(); }
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ long long&) const
+ { throw facet_error(); return iter_type(); }
+
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ unsigned long long&) const
+ { throw facet_error(); return iter_type(); }
#endif
- virtual iter_type
- do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
- float&) const
- { 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(); }
- };
-
- class fail_num_put : public std::num_put<char>
- {
- typedef std::ios_base ios_base;
+ virtual iter_type
+ do_get(iter_type, iter_type, ios_base&, ios_base::iostate& __err,
+ float&) const
+ { 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(); }
+ };
- protected:
- iter_type
- do_put(iter_type, ios_base&, char_type __fill, bool __v) const
- { throw facet_error(); return iter_type(NULL); }
+ typedef fail_num_get<char> fail_num_get_char;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef fail_num_get<wchar_t> fail_num_get_wchar_t;
+#endif
- virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, long __v) const
- { throw facet_error(); return iter_type(NULL); }
+ template<typename T>
+ class fail_num_put
+ : public std::num_put<T>
+ {
+ 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;
+
+ 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); }
+ 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
- virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, long long __v) const
- { throw facet_error(); return iter_type(NULL); }
+ virtual iter_type
+ do_put(iter_type, ios_base&, char_type __fill, long long __v) const
+ { throw facet_error(); return iter_type(NULL); }
- virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, unsigned long long) const
- { throw facet_error(); return iter_type(NULL); }
+ virtual iter_type
+ do_put(iter_type, ios_base&, char_type __fill, unsigned long long) const
+ { throw facet_error(); return iter_type(NULL); }
#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
- do_put(iter_type, ios_base&, char_type __fill, double __v) const
- { throw facet_error(); return iter_type(NULL); }
-
- virtual iter_type
- do_put(iter_type, ios_base&, char_type __fill, long double __v) const
- { throw facet_error(); return iter_type(NULL); }
+ virtual iter_type
+ do_put(iter_type, ios_base&, char_type __fill, long double __v) const
+ { 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
- do_put(iter_type, ios_base&, char_type __fill, const void* __v) const
- { throw facet_error(); return iter_type(NULL); }
- };
+ typedef fail_num_put<char> fail_num_put_char;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ typedef fail_num_put<wchar_t> fail_num_put_wchar_t;
+#endif
}; // namespace __gnu_test
#endif // _GLIBCXX_TESTSUITE_IO_H