OSDN Git Service

2004-12-02 Paolo Carlini <pcarlini@suse.de>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 2 Dec 2004 13:24:46 +0000 (13:24 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 2 Dec 2004 13:24:46 +0000 (13:24 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91635 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
libstdc++-v3/testsuite/testsuite_io.h

index 7768163..5ea2e14 100644 (file)
@@ -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.
index f7c43e2..5bb89ad 100644 (file)
@@ -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);
 
index 0b223bc..3b20869 100644 (file)
@@ -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);
 
index 32ff029..9fb887e 100644 (file)
@@ -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);
 
index 6b3b77d..88ed30e 100644 (file)
@@ -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);
 
index 809d080..14f5cb4 100644 (file)
@@ -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