Merge with trank @ 137446
[official-gcc.git] / libstdc++-v3 / testsuite / 21_strings / basic_string / numeric_conversions / wchar_t / stof.cc
bloba6319f8e31e52376e079566cdab85a34cdf90e0b
1 // { dg-options "-std=gnu++0x" }
2 // 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
4 // Copyright (C) 2008 Free Software Foundation, Inc.
5 //
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 2, or (at your option)
10 // any later version.
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 COPYING. If not, write to the Free
19 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20 // USA.
22 // 21.4 Numeric Conversions [string.conversions]
24 #include <string>
25 #include <limits>
26 #include <stdexcept>
27 #include <testsuite_hooks.h>
29 void
30 test01()
32 #ifdef _GLIBCXX_USE_C99
34 bool test __attribute__((unused)) = false;
35 using namespace std;
37 try
39 wstring one;
40 stof(one);
42 catch(std::invalid_argument)
44 test = true;
46 catch(...)
49 VERIFY( test );
51 test = false;
52 try
54 wstring one(L"a");
55 stof(one);
57 catch(std::invalid_argument)
59 test = true;
61 catch(...)
64 VERIFY( test );
66 float f1 = 0.0f;
67 size_t idx1 = 0;
68 try
70 wstring one(L"2.0a");
71 f1 = stof(one, &idx1);
73 catch(...)
75 test = false;
77 VERIFY( test );
78 VERIFY( f1 == 2.0f );
79 VERIFY( idx1 == 3 );
81 test = false;
82 try
84 wstring one(L"1e");
85 one.append(2 * numeric_limits<float>::max_exponent10, L'9');
86 f1 = stof(one);
88 catch(std::out_of_range)
90 test = true;
92 catch(...)
95 VERIFY( test );
96 VERIFY( f1 == 2.0f );
98 try
100 long double ld0 = numeric_limits<float>::max() / 100.0;
101 wstring one(to_wstring(ld0));
102 stof(one);
104 catch(...)
106 test = false;
108 VERIFY( test );
110 if ((numeric_limits<long double>::max() / 10000.0L)
111 > numeric_limits<float>::max())
113 test = false;
114 f1 = -1.0f;
117 long double ld1 = numeric_limits<float>::max();
118 ld1 *= 100.0;
119 wstring one(to_wstring(ld1));
120 f1 = stof(one);
122 catch(std::out_of_range)
124 test = true;
126 catch(...)
129 VERIFY( test );
130 VERIFY( f1 == -1.0f );
133 #endif
136 int main()
138 test01();
139 return 0;