stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: test for lib.string.io
Date Wed, 12 Jul 2006 00:39:10 GMT
Farid Zaripov wrote:
>>-----Original Message-----
>>From: Martin Sebor [mailto:sebor@roguewave.com] 
>>Sent: Friday, June 30, 2006 1:25 AM
>>To: stdcxx-dev@incubator.apache.org
>>Subject: Re: test for lib.string.io
> 
> 
>>Thanks for pointing it out! I think I might go ahead and 
>>commit these changes sometime over the weekend.
> 
> 
>   Martin, the 21.string.io test still generates rw_asserts due to opened
> issues 205 and 206.
> 
>   What about these issues?

I committed the patch below. While the new code is guarded with
a config macro (which is not #defined unless extensions are turned
off) I'm beginning to think we might as well enable the new code
unconditionally since the behavior currently required by the standard
is quite inconsistent (see below).

http://svn.apache.org/viewvc?rev=420970&view=rev

With the patch applied I get 120 failed assertions out of the io
test, all of them on lines 872 through 886. They all look like
they are due to the test expecting failbit for insertions into
the stream buffer that fail and the library setting badbit. I
think the library does the right thing and the standard needs
to be fixed to say that operator<<(ostream&, string) a) is
a Formatted Output Function and b) should behave according to
the requirements on such functions and thus should set badbit
and not failbit when it fails to produce the expected output.

Martin

Functions that are required to set badbit:
   ios::iword(int): on failure
   ios::pword(int): on failure
   ios::clear(iostate): rdbuf() == 0
   Formatted/Unformatted Input Functions: on exception from streambuf
   Formatted/Unformatted Output Functions: on exception from streambuf
U istream::putback(char): rdbuf()->sputbackc() returns EOF
U istream::unget(): rdbuf()->sungetc() returns EOF
U istream::sync(): rdbuf()->sync() returns -1
F ostream::operator<<(arithmetic and void*): iterator.failed() is true
F ostream::operator<<(streambuf *sb): sb == 0
U ostream::put(char): on failure to insert
U ostream::write(const char*, streamsize): on failure to insert
   ostream::flush(): rdbuf()->pubsync() returns -1

Functions that are required to set failbit:
   operator>>(istream&, string&): extracts 0 chars
   operator<<(ostream&, string): xrdbuf()->sputn() fails
U getline(istream&, string&): stores max_size() chars or extracts
   0 chars
   xxx_get::get(): parse error or bad grouping
F operator>>(istream&, bitset&): stores 0 chars
   operator>>(istream&, complex&): "bad input"
   istream::sentry(istream&): sgetc/sbumpc() returns EOF or stream
   not good
F istream::operator>>(short &val): out of range val
F istream::operator>>(int &val): out of range val
F istream::operator>>(charT*): extracts no chars
F istream::operator>>(charT&): extracts no chars
F istream::operator>>(streambuf *sb): sb == 0 or extracts no chars
U istream::get(): extracts no chars
U istream::get(char&): extracts no chars
U istream::get(char*, streamsize): stores no chars
U istream::get(streambuf &sb): inserts no chars to sb
U istream::getline(char*, streamsize n): extracts 0 or stores
   (n - 1) chars
U istream::read(char*, streamsize): !good() or reaches EOF
U istream::readsome(char*, streamsize): !good()
U istream::putback(char): !good()
U istream::unget(): !good()
U istream::seekg(pos_type): on failure
   ostream::sentry::sentry(ostream&): any reason
U ostream::seekp(pos_type): on failure
   Formatted Output Functions: on failure to generate output
F ostream::operator<<(streambuf*): inserts no chars or exception
   during input
   ifstream::ifstream(const char*): rdbuf()->open() returns 0
   ifstream::open(const char*): rdbuf()->open() returns 0
   ifstream::close(): rdbuf()->close() returns false
   ofstream::ofstream(const char*): rdbuf()->open() returns 0
   ofstream::open(const char*): rdbuf()->open() returns 0
   ofstream::close(): rdbuf()->close() returns false
   fstream::fstream(const char*): rdbuf()->open() returns 0
   fstream::open(const char*): rdbuf()->open() returns 0
   fstream::close(): rdbuf()->close() returns false

F: Formatted I/O Functions
U: Unformatted I/O Functions

Mime
View raw message