This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[v3] Add infrastructure for iostream/wchar_t tests


Hi,

tested x86-linux, committed.

Paolo.

//////////////
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.
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc	Thu Nov 27 09:14:23 2003
--- libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_badbit_throw.cc	Thu Dec  2 12:28:06 2004
***************
*** 1,6 ****
  // 2003-03-08  Jerry Quinn  <jlquinn@optonline.net>
  
! // Copyright (C) 2003 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
--- 1,6 ----
  // 2003-03-08  Jerry Quinn  <jlquinn@optonline.net>
  
! // 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
*************** void test_badbit()
*** 30,36 ****
    using namespace std;
    bool test __attribute__((unused)) = true;
  
!   locale loc(locale::classic(), new __gnu_test::fail_num_get);
    istringstream stream("jaylib - champion sound");
    stream.imbue(loc);
  
--- 30,36 ----
    using namespace std;
    bool test __attribute__((unused)) = true;
  
!   locale loc(locale::classic(), new __gnu_test::fail_num_get_char);
    istringstream stream("jaylib - champion sound");
    stream.imbue(loc);
  
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc	Thu Nov 27 09:14:23 2003
--- libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/exceptions_failbit_throw.cc	Thu Dec  2 12:28:22 2004
***************
*** 1,5 ****
! // Copyright (C) 2003
! // 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
--- 1,4 ----
! // 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
*************** void test_failbit()
*** 37,43 ****
    using namespace std;
    bool test __attribute__((unused)) = true;
  
!   locale loc(locale::classic(), new __gnu_test::fail_num_get);
    istringstream stream("jaylib - champion sound");
    stream.imbue(loc);
  
--- 36,42 ----
    using namespace std;
    bool test __attribute__((unused)) = true;
  
!   locale loc(locale::classic(), new __gnu_test::fail_num_get_char);
    istringstream stream("jaylib - champion sound");
    stream.imbue(loc);
  
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc	Mon Apr 19 21:00:04 2004
--- libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_badbit_throw.cc	Thu Dec  2 12:25:36 2004
*************** void test_badbit()
*** 30,36 ****
    using namespace std;
    bool test __attribute__((unused)) = true;
  
!   locale loc(locale::classic(), new __gnu_test::fail_num_put);
    ostringstream stream("jaylib - champion sound");
    stream.imbue(loc);
  
--- 30,36 ----
    using namespace std;
    bool test __attribute__((unused)) = true;
  
!   locale loc(locale::classic(), new __gnu_test::fail_num_put_char);
    ostringstream stream("jaylib - champion sound");
    stream.imbue(loc);
  
diff -prN libstdc++-v3-orig/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc
*** libstdc++-v3-orig/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc	Mon Apr 19 21:00:04 2004
--- libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/exceptions_failbit_throw.cc	Thu Dec  2 12:25:26 2004
*************** void test_failbit()
*** 37,43 ****
    using namespace std;
    bool test __attribute__((unused)) = true;
  
!   locale loc(locale::classic(), new __gnu_test::fail_num_put);
    ostringstream stream("jaylib - champion sound");
    stream.imbue(loc);
  
--- 37,43 ----
    using namespace std;
    bool test __attribute__((unused)) = true;
  
!   locale loc(locale::classic(), new __gnu_test::fail_num_put_char);
    ostringstream stream("jaylib - champion sound");
    stream.imbue(loc);
  
diff -prN libstdc++-v3-orig/testsuite/testsuite_io.h libstdc++-v3/testsuite/testsuite_io.h
*** libstdc++-v3-orig/testsuite/testsuite_io.h	Wed Sep 29 23:14:40 2004
--- libstdc++-v3/testsuite/testsuite_io.h	Thu Dec  2 13:06:25 2004
*************** namespace __gnu_test
*** 103,291 ****
    // 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;
!     
!   public:
!     sync_streambuf()
!     : m_sync_called(false)
!     { }
! 
!     bool sync_called() const
!     { return m_sync_called; }
! 
!   protected:
!     int sync()
      {
!       m_sync_called = true;
!       return 0;
!     }
!   };
  
    // 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()
!     {
!       p[0] = 's';
!       p[1] = char();
!       setg(p, p, p + 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; 
!     }
!   };
  
    // 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(); }
! 
!     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(); }
! #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;
! 
!   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 
!     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); }
! #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, 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); }
!   };
  }; // namespace __gnu_test
  
  #endif // _GLIBCXX_TESTSUITE_IO_H
--- 103,327 ----
    // 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().
!   template<typename T>
!     class sync_buf
!     : public T
      {
!     private:
!       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.
    struct underflow_error: std::exception { };
    struct overflow_error: std::exception { };
    struct positioning_error: std::exception { };
  
!   template<typename T>
!     struct fail_buf
!     : public T
      {
!       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;
! 
!     private:
!       char_type p[2];
! 
!     public:
!       fail_buf()
!       {
! 	p[0] = char_type('s');
! 	p[1] = char_type();
! 	setg(p, p, p + 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; 
!       }
!     };
! 
!   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 { };
  
!   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;
! 
!     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(); }
!       
!       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(); }
! #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(); }
!     };
! 
!   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
! 
!   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); }
  
  #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, 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, 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); }
!     };
! 
!   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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]