2 // Petter Urkedal <petter@matfys.lth.se>
4 // Copyright (C) 2000-2016 Free Software Foundation, Inc.
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING3. If not see
19 // <http://www.gnu.org/licenses/>.
26 #include <testsuite_hooks.h>
30 inline bool flteq(R x
, R y
)
32 if (x
== R(0)) return y
== R(0);
33 else return std::fabs(x
-y
) < 1e-6*std::fabs(x
);
38 test_good(std::string str
, R x
, R y
)
40 bool test
__attribute__((unused
)) = true;
43 std::istringstream
iss(str
);
46 VERIFY( flteq(z
.real(), x
) );
47 VERIFY( flteq(z
.imag(), y
) );
54 test_fail(std::string str
)
56 bool test
__attribute__((unused
)) = true;
58 std::istringstream
iss(str
);
60 VERIFY( iss
.fail() && !iss
.bad() );
68 test_good
<R
>("(-1.1,3.7)#", -1.1, 3.7);
69 test_good
<R
>("( .7e6 , \n-3.1)#", .7e6
, -3.1);
70 test_good
<R
>("(\t0,-1)#", 0.0, -1.0);
71 test_good
<R
>("(-3.14)#", -3.14, 0.0);
72 test_good
<R
>("-.1#", -.1, 0.0);
73 test_good
<R
>(" ( -2.7e3 )#", -2.7e3
, 0.0);
74 test_good
<R
>(" -.1#", -.1, 0.0);
75 test_fail
<R
>("(a,1)");
77 test_fail
<R
>("(1,a)");
78 test_fail
<R
>("(1, )");
79 test_fail
<R
>("|1,1)");
80 test_fail
<R
>("(1|1)");
81 test_fail
<R
>("(1,1|");
89 bool test
__attribute__((unused
)) = true;
91 complex<float> cf01(-1.1, -333.2);
94 string str
= ss
.str();
95 VERIFY( str
== "(-1.1,-333.2)" );
99 struct gnu_char_traits
: public std::char_traits
<char>
102 typedef std::basic_ostringstream
<char, gnu_char_traits
> gnu_sstream
;
103 template class std::basic_string
<char, gnu_char_traits
, std::allocator
<char> >;
107 bool test
__attribute__((unused
)) = true;
109 // Construct locale with specialized facets.
110 typedef gnu_sstream::__num_put_type numput_type
;
111 typedef gnu_sstream::__num_get_type numget_type
;
112 std::locale loc_c
= std::locale::classic();
113 std::locale
loc_1(loc_c
, new numput_type
);
114 std::locale
loc_2(loc_1
, new numget_type
);
115 VERIFY( std::has_facet
<numput_type
>(loc_2
) );
116 VERIFY( std::has_facet
<numget_type
>(loc_2
) );
122 std::complex<double> x(3, 4);
124 VERIFY( sstr
.str() == "(3,4)" );
132 testall
<long double>();