]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/22_locale/num_get/get/char/12.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 22_locale / num_get / get / char / 12.cc
1 // 2003-12-22 Paolo Carlini <pcarlini@suse.de>
2
3 // Copyright (C) 2003-2020 Free Software Foundation, Inc.
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 3, 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 COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
19
20 // 22.2.2.1.1 num_get members
21
22 #include <locale>
23 #include <sstream>
24 #include <testsuite_hooks.h>
25
26 struct Punct1: std::numpunct<char>
27 {
28 std::string do_grouping() const { return "\1"; }
29 char do_thousands_sep() const { return '+'; }
30 char do_decimal_point() const { return 'x'; }
31 };
32
33 struct Punct2: std::numpunct<char>
34 {
35 std::string do_grouping() const { return "\1"; }
36 char do_thousands_sep() const { return 'X'; }
37 char do_decimal_point() const { return '-'; }
38 };
39
40 // http://gcc.gnu.org/ml/libstdc++/2003-12/msg00201.html
41 void test01()
42 {
43 using namespace std;
44 typedef istreambuf_iterator<char> iterator_type;
45
46 istringstream iss1, iss2;
47 iss1.imbue(locale(iss1.getloc(), new Punct1));
48 iss2.imbue(locale(iss2.getloc(), new Punct2));
49 const num_get<char>& ng1 = use_facet<num_get<char> >(iss1.getloc());
50 const num_get<char>& ng2 = use_facet<num_get<char> >(iss2.getloc());
51
52 ios_base::iostate err = ios_base::goodbit;
53 iterator_type end;
54 long l = 1l;
55 long l1 = 0l;
56 long l2 = 10l;
57 long l3 = 1l;
58 long l4 = 63l;
59 double d = 0.0;
60 double d1 = .4;
61 double d2 = 0.0;
62 double d3 = .1;
63
64 iss1.str("+3");
65 err = ios_base::goodbit;
66 end = ng1.get(iss1.rdbuf(), 0, iss1, err, l);
67 VERIFY( err == ios_base::failbit );
68 VERIFY( *end == '+' );
69
70 iss1.str("0x1");
71 iss1.clear();
72 err = ios_base::goodbit;
73 end = ng1.get(iss1.rdbuf(), 0, iss1, err, l);
74 VERIFY( err == ios_base::goodbit );
75 VERIFY( *end == 'x' );
76 VERIFY( l == l1 );
77
78 iss1.str("0Xa");
79 iss1.clear();
80 iss1.unsetf(ios::basefield);
81 err = ios_base::goodbit;
82 end = ng1.get(iss1.rdbuf(), 0, iss1, err, l);
83 VERIFY( err == ios_base::eofbit );
84 VERIFY( l == l2 );
85
86 iss1.str("0xa");
87 iss1.clear();
88 err = ios_base::goodbit;
89 end = ng1.get(iss1.rdbuf(), 0, iss1, err, l);
90 VERIFY( err == ios_base::goodbit );
91 VERIFY( *end == 'x' );
92 VERIFY( l == l1 );
93
94 iss1.str("+5");
95 iss1.clear();
96 err = ios_base::goodbit;
97 end = ng1.get(iss1.rdbuf(), 0, iss1, err, d);
98 VERIFY( err == ios_base::failbit );
99 VERIFY( *end == '+' );
100
101 iss1.str("x4");
102 iss1.clear();
103 err = ios_base::goodbit;
104 end = ng1.get(iss1.rdbuf(), 0, iss1, err, d);
105 VERIFY( err == ios_base::eofbit );
106 VERIFY( d == d1 );
107
108 iss2.str("0001-");
109 err = ios_base::goodbit;
110 end = ng2.get(iss2.rdbuf(), 0, iss2, err, l);
111 VERIFY( err == ios_base::goodbit );
112 VERIFY( *end == '-' );
113 VERIFY( l == l3 );
114
115 iss2.str("-2");
116 iss2.clear();
117 err = ios_base::goodbit;
118 end = ng2.get(iss2.rdbuf(), 0, iss2, err, l);
119 VERIFY( err == ios_base::failbit );
120 VERIFY( *end == '-' );
121
122 iss2.str("0X1");
123 iss2.clear();
124 iss2.unsetf(ios::basefield);
125 err = ios_base::goodbit;
126 end = ng2.get(iss2.rdbuf(), 0, iss2, err, l);
127 VERIFY( err == ios_base::failbit );
128 VERIFY( *end == 'X' );
129 VERIFY( l == 0 );
130
131 iss2.str("000778");
132 iss2.clear();
133 err = ios_base::goodbit;
134 end = ng2.get(iss2.rdbuf(), 0, iss2, err, l);
135 VERIFY( err == ios_base::goodbit );
136 VERIFY( *end == '8' );
137 VERIFY( l == l4 );
138
139 iss2.str("00X");
140 iss2.clear();
141 err = ios_base::goodbit;
142 end = ng2.get(iss2.rdbuf(), 0, iss2, err, d);
143 VERIFY( err == (ios_base::eofbit | ios_base::failbit) );
144 VERIFY( d == d2 );
145
146 iss2.str("-1");
147 iss2.clear();
148 err = ios_base::goodbit;
149 end = ng2.get(iss2.rdbuf(), 0, iss2, err, d);
150 VERIFY( err == ios_base::eofbit );
151 VERIFY( d == d3 );
152 }
153
154
155 int main()
156 {
157 test01();
158 return 0;
159 }