3 // Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
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)
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.
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,
21 // 27.6.1.2.2 arithmetic extractors
23 // XXX This test fails on sparc-solaris2 because of a bug in libc
24 // XXX sscanf for very long input. See:
25 // XXX http://gcc.gnu.org/ml/gcc/2002-12/msg01422.html
26 // { dg-do run { xfail sparc*-*-solaris2* } }
30 #include <testsuite_hooks.h>
33 std::string
str_02("true false 0 1 110001");
34 std::string
str_03("-19999999 777777 -234234 233 -234 33 1 66300.25 .315 1.5");
35 std::string
str_04("0123");
37 std::stringbuf
isbuf_01(std::ios_base::in
);
38 std::stringbuf
isbuf_02(str_02
, std::ios_base::in
);
39 std::stringbuf
isbuf_03(str_03
, std::ios_base::in
);
40 std::stringbuf
isbuf_04(str_04
, std::ios_base::in
);
42 std::istream
is_01(NULL
);
43 std::istream
is_02(&isbuf_02
);
44 std::istream
is_03(&isbuf_03
);
45 std::istream
is_04(&isbuf_04
);
46 std::stringstream
ss_01(str_01
);
49 // excess input should not cause a core dump
51 bool test12_aux(bool integer_type
)
53 bool test
__attribute__((unused
)) = true;
57 // This many digits will overflow integer types in base 10.
58 digits_overflow
= std::numeric_limits
<T
>::digits10
+ 2;
60 // This might do it, unsure.
61 digits_overflow
= std::numeric_limits
<T
>::max_exponent10
+ 1;
64 std::string part
= "1234567890123456789012345678901234567890";
65 for (std::size_t i
= 0; i
< digits_overflow
/ part
.size() + 1; ++i
)
67 std::stringbuf
sb(st
);
77 bool test
__attribute__((unused
)) = true;
78 VERIFY(test12_aux
<short>(true));
79 VERIFY(test12_aux
<int>(true));
80 VERIFY(test12_aux
<long>(true));
81 VERIFY(test12_aux
<float>(false));
82 VERIFY(test12_aux
<double>(false));
83 VERIFY(test12_aux
<long double>(false));