]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
Update copyright years in libstdc++-v3/
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / num_put / put / char / 1.cc
1 // { dg-require-namedlocale "de_DE" }
2
3 // 2001-11-19 Benjamin Kosnik <bkoz@redhat.com>
4
5 // Copyright (C) 2001-2014 Free Software Foundation, Inc.
6 //
7 // This file is part of the GNU ISO C++ Library. This library is free
8 // software; you can redistribute it and/or modify it under the
9 // terms of the GNU General Public License as published by the
10 // Free Software Foundation; either version 3, or (at your option)
11 // any later version.
12
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
17
18 // You should have received a copy of the GNU General Public License along
19 // with this library; see the file COPYING3. If not see
20 // <http://www.gnu.org/licenses/>.
21
22 // 22.2.2.2.1 num_put members
23
24 #include <locale>
25 #include <sstream>
26 #include <testsuite_hooks.h>
27
28 void test01()
29 {
30 using namespace std;
31 typedef ostreambuf_iterator<char> iterator_type;
32
33 bool test __attribute__((unused)) = true;
34
35 // basic construction
36 locale loc_c = locale::classic();
37 locale loc_de = locale("de_DE");
38 VERIFY( loc_c != loc_de );
39
40 // cache the numpunct facets
41 const numpunct<char>& numpunct_de = use_facet<numpunct<char> >(loc_de);
42
43 // sanity check the data is correct.
44 const string empty;
45 string result1;
46 string result2;
47
48 bool b1 = true;
49 bool b0 = false;
50 unsigned long ul1 = 1294967294;
51 double d1 = 1.7976931348623157e+308;
52 double d2 = 2.2250738585072014e-308;
53 long double ld1 = 1.7976931348623157e+308;
54 long double ld2 = 2.2250738585072014e-308;
55 const void* cv = &ld1;
56
57 // cache the num_put facet
58 ostringstream oss;
59 oss.imbue(loc_de);
60 const num_put<char>& np = use_facet<num_put<char> >(oss.getloc());
61
62 // bool, simple
63 iterator_type os_it00 = oss.rdbuf();
64 np.put(os_it00, oss, '+', b1);
65 result1 = oss.str();
66 VERIFY( result1 == "1" );
67
68 oss.str(empty);
69 np.put(oss.rdbuf(), oss, '+', b0);
70 result2 = oss.str();
71 VERIFY( result2 == "0" );
72
73 // ... and one that does
74 oss.imbue(loc_de);
75 oss.str(empty);
76 oss.clear();
77 oss.width(20);
78 oss.setf(ios_base::left, ios_base::adjustfield);
79 np.put(oss.rdbuf(), oss, '+', ul1);
80 result1 = oss.str();
81 VERIFY( result1 == "1.294.967.294+++++++" );
82
83 // double
84 oss.str(empty);
85 oss.clear();
86 oss.width(20);
87 oss.setf(ios_base::left, ios_base::adjustfield);
88 np.put(oss.rdbuf(), oss, '+', d1);
89 result1 = oss.str();
90 VERIFY( result1 == "1,79769e+308++++++++" );
91
92 oss.str(empty);
93 oss.clear();
94 oss.width(20);
95 oss.setf(ios_base::right, ios_base::adjustfield);
96 np.put(oss.rdbuf(), oss, '+', d2);
97 result1 = oss.str();
98 VERIFY( result1 == "++++++++2,22507e-308" );
99
100 oss.str(empty);
101 oss.clear();
102 oss.width(20);
103 oss.setf(ios_base::right, ios_base::adjustfield);
104 oss.setf(ios_base::scientific, ios_base::floatfield);
105 np.put(oss.rdbuf(), oss, '+', d2);
106 result2 = oss.str();
107 VERIFY( result2 == "+++++++2,225074e-308" );
108
109 oss.str(empty);
110 oss.clear();
111 oss.width(20);
112 oss.precision(10);
113 oss.setf(ios_base::right, ios_base::adjustfield);
114 oss.setf(ios_base::scientific, ios_base::floatfield);
115 oss.setf(ios_base::uppercase);
116 np.put(oss.rdbuf(), oss, '+', d2);
117 result1 = oss.str();
118 VERIFY( result1 == "+++2,2250738585E-308" );
119
120 // long double
121 oss.str(empty);
122 oss.clear();
123 np.put(oss.rdbuf(), oss, '+', ld1);
124 result1 = oss.str();
125 VERIFY( result1 == "1,7976931349E+308" );
126
127 oss.str(empty);
128 oss.clear();
129 oss.precision(0);
130 oss.setf(ios_base::fixed, ios_base::floatfield);
131 np.put(oss.rdbuf(), oss, '+', ld2);
132 result1 = oss.str();
133 VERIFY( result1 == "0" );
134
135 // const void*
136 oss.str(empty);
137 oss.clear();
138 np.put(oss.rdbuf(), oss, '+', cv);
139 result1 = oss.str();
140 // No grouping characters.
141 VERIFY( !char_traits<char>::find(result1.c_str(),
142 result1.size(),
143 numpunct_de.decimal_point()) );
144 // Should contain an 'x'.
145 VERIFY( result1.find('x') == 1 );
146
147 #ifdef _GLIBCXX_USE_LONG_LONG
148 long long ll1 = 9223372036854775807LL;
149
150 oss.str(empty);
151 oss.clear();
152 np.put(oss.rdbuf(), oss, '+', ll1);
153 result1 = oss.str();
154 VERIFY( result1 == "9.223.372.036.854.775.807" );
155 #endif
156 }
157
158 int main()
159 {
160 test01();
161 return 0;
162 }
163
164