]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc
* builtins.def (BUILT_IN_PRINTF, BUILT_IN_FPRINTF): Changed from
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 27_io / ios_base / storage / 2.cc
CommitLineData
3fcfcab5 1// 2000-12-19 bkoz
2
30556315 3// Copyright (C) 2000, 2002, 2003 Free Software Foundation
3fcfcab5 4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING. If not, write to the Free
18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19// USA.
20
21// 27.4.2.5 ios_base storage functions
22
7f5767ec 23// XXX This test will not work for some versions of irix6 because of
24// XXX bug(s) in libc malloc for very large allocations. However
25// XXX -lmalloc seems to work.
26// See http://gcc.gnu.org/ml/gcc/2002-05/msg01012.html
27// { dg-options "-lmalloc" { target mips*-*-irix6* } }
28
3fcfcab5 29#include <sstream>
30#include <iostream>
0194306c 31#include <testsuite_hooks.h>
3fcfcab5 32
93218b6c 33// libstdc++/3129
34void test02()
35{
36 bool test = true;
a0654d3e 37 int max = std::numeric_limits<int>::max() - 1;
93218b6c 38 std::stringbuf strbuf;
39 std::ios ios(&strbuf);
40
d1a218b7 41 ios.exceptions(std::ios::badbit);
42
93218b6c 43 long l = 0;
44 void* v = 0;
45
46 // pword
d1a218b7 47 ios.pword(1) = v;
48 VERIFY( ios.pword(1) == v );
49
93218b6c 50 try
51 {
52 v = ios.pword(max);
53 }
54 catch(std::ios_base::failure& obj)
55 {
56 // Ok.
57 VERIFY( ios.bad() );
58 }
59 catch(...)
60 {
61 VERIFY( test = false );
62 }
63 VERIFY( v == 0 );
64
d1a218b7 65 VERIFY( ios.pword(1) == v );
66
67 // max is different code path from max-1
68 v = &test;
69 try
70 {
71 v = ios.pword(std::numeric_limits<int>::max());
72 }
73 catch(std::ios_base::failure& obj)
74 {
75 // Ok.
76 VERIFY( ios.bad() );
77 }
78 catch(...)
79 {
80 VERIFY( test = false );
81 }
82 VERIFY( v == &test );
83
93218b6c 84 // iword
d1a218b7 85 ios.iword(1) = 1;
86 VERIFY( ios.iword(1) == 1 );
87
93218b6c 88 try
89 {
90 l = ios.iword(max);
91 }
92 catch(std::ios_base::failure& obj)
93 {
94 // Ok.
95 VERIFY( ios.bad() );
96 }
97 catch(...)
98 {
99 VERIFY( test = false );
100 }
101 VERIFY( l == 0 );
d1a218b7 102
103 VERIFY( ios.iword(1) == 1 );
104
105 // max is different code path from max-1
106 l = 1;
107 try
108 {
109 l = ios.iword(std::numeric_limits<int>::max());
110 }
111 catch(std::ios_base::failure& obj)
112 {
113 // Ok.
114 VERIFY( ios.bad() );
115 }
116 catch(...)
117 {
118 VERIFY( test = false );
119 }
120 VERIFY( l == 1 );
121
93218b6c 122}
3fcfcab5 123
124int main(void)
125{
30556315 126 __gnu_cxx_test::set_memory_limits();
93218b6c 127 test02();
3fcfcab5 128 return 0;
129}