OSDN Git Service

Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / 27_io / basic_istream / extractors_other / char / exceptions_failbit_throw.cc
1 // Copyright (C) 2003, 2009 Free Software Foundation, Inc.
2 //
3 // This file is part of the GNU ISO C++ Library.  This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
7 // any later version.
8
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3.  If not see
16 // <http://www.gnu.org/licenses/>.
17
18
19 #include <istream>
20 #include <streambuf>
21 #include <sstream>
22 #include <testsuite_hooks.h>
23 #include <testsuite_io.h>
24
25 using namespace std;
26
27 void test10()
28 {
29   bool test __attribute__((unused)) = true;
30   __gnu_test::fail_streambuf bib;
31   istream stream(&bib);
32   stream.exceptions(ios_base::failbit);
33   stringbuf sbuf("", ios_base::out);
34
35   try
36     {
37       stream >> &sbuf;
38       VERIFY(false);
39     }
40   catch (ios_base::failure&)
41     { VERIFY(false); }
42   catch (__gnu_test::underflow_error&)
43     { }
44   catch (...)
45     { VERIFY(false); }
46
47   VERIFY(stream.rdstate() & ios_base::failbit);
48   VERIFY((stream.rdstate() & ios_base::badbit) == 0);
49 }
50
51 void test12()
52 {
53   bool test __attribute__((unused)) = true;
54   istringstream stream("foo, bar, qux");
55   stream.exceptions(ios_base::failbit);
56   __gnu_test::fail_streambuf bob;
57
58   try
59     {
60       stream >> &bob;
61       VERIFY(false);
62     }
63   catch (ios_base::failure&)
64     { VERIFY(false); }
65   catch (__gnu_test::overflow_error&)
66     { }
67   catch (...)
68     { VERIFY(false); }
69
70   VERIFY(stream.rdstate() & ios_base::failbit);
71   VERIFY((stream.rdstate() & ios_base::badbit) == 0);
72 }
73
74 // libstdc++/9371
75 int main()
76 {
77   test10();
78   test12();
79   return 0;
80 }