]>
git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/22_locale/num_get/get/wchar_t/37958.cc
1 // 2008-10-31 Paolo Carlini <paolo.carlini@oracle.com>
3 // Copyright (C) 2008-2024 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 3, 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 COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
20 // 22.2.2.1.1 num_get members
24 #include <testsuite_hooks.h>
26 struct Punct1
: std::numpunct
<wchar_t>
28 std::wstring
do_truename() const { return L
"a"; }
29 std::wstring
do_falsename() const { return L
"abb"; }
32 struct Punct2
: std::numpunct
<wchar_t>
34 std::wstring
do_truename() const { return L
"1"; }
35 std::wstring
do_falsename() const { return L
"0"; }
38 struct Punct3
: std::numpunct
<wchar_t>
40 std::wstring
do_truename() const { return L
""; }
41 std::wstring
do_falsename() const { return L
""; }
44 struct Punct4
: std::numpunct
<wchar_t>
46 std::wstring
do_truename() const { return L
"one"; }
47 std::wstring
do_falsename() const { return L
"two"; }
54 typedef istreambuf_iterator
<wchar_t> iterator_type
;
56 wistringstream iss0
, iss1
, iss2
, iss3
, iss4
;
57 iss1
.imbue(locale(iss1
.getloc(), new Punct1
));
58 iss2
.imbue(locale(iss2
.getloc(), new Punct2
));
59 iss3
.imbue(locale(iss3
.getloc(), new Punct3
));
60 iss4
.imbue(locale(iss4
.getloc(), new Punct4
));
61 const num_get
<wchar_t>& ng0
= use_facet
<num_get
<wchar_t> >(iss0
.getloc());
62 const num_get
<wchar_t>& ng1
= use_facet
<num_get
<wchar_t> >(iss1
.getloc());
63 const num_get
<wchar_t>& ng2
= use_facet
<num_get
<wchar_t> >(iss2
.getloc());
64 const num_get
<wchar_t>& ng3
= use_facet
<num_get
<wchar_t> >(iss3
.getloc());
65 const num_get
<wchar_t>& ng4
= use_facet
<num_get
<wchar_t> >(iss4
.getloc());
67 ios_base::iostate err
= ios_base::goodbit
;
76 iss0
.setf(ios_base::boolalpha
);
77 err
= ios_base::goodbit
;
78 end
= ng0
.get(iss0
.rdbuf(), 0, iss0
, err
, b0
);
79 VERIFY( err
== ios_base::goodbit
);
84 err
= ios_base::goodbit
;
85 end
= ng0
.get(iss0
.rdbuf(), 0, iss0
, err
, b0
);
86 VERIFY( err
== ios_base::goodbit
);
87 VERIFY( b0
== false );
90 iss1
.setf(ios_base::boolalpha
);
91 err
= ios_base::goodbit
;
92 end
= ng1
.get(iss1
.rdbuf(), 0, iss1
, err
, b1
);
93 VERIFY( err
== ios_base::eofbit
);
98 err
= ios_base::goodbit
;
99 end
= ng1
.get(iss1
.rdbuf(), 0, iss1
, err
, b1
);
100 VERIFY( err
== ios_base::goodbit
);
101 VERIFY( b1
== false );
105 err
= ios_base::goodbit
;
106 end
= ng1
.get(iss1
.rdbuf(), 0, iss1
, err
, b1
);
107 VERIFY( err
== ios_base::failbit
);
108 VERIFY( b1
== false );
109 VERIFY( *end
== L
'c' );
114 err
= ios_base::goodbit
;
115 end
= ng1
.get(iss1
.rdbuf(), 0, iss1
, err
, b1
);
116 VERIFY( err
== (ios_base::failbit
| ios_base::eofbit
) );
117 VERIFY( b1
== false );
120 iss2
.setf(ios_base::boolalpha
);
121 err
= ios_base::goodbit
;
122 end
= ng2
.get(iss2
.rdbuf(), 0, iss2
, err
, b2
);
123 VERIFY( err
== ios_base::goodbit
);
124 VERIFY( b2
== true );
128 err
= ios_base::goodbit
;
129 end
= ng2
.get(iss2
.rdbuf(), 0, iss2
, err
, b2
);
130 VERIFY( err
== ios_base::goodbit
);
131 VERIFY( b2
== false );
136 err
= ios_base::goodbit
;
137 end
= ng2
.get(iss2
.rdbuf(), 0, iss2
, err
, b2
);
138 VERIFY( err
== ios_base::failbit
);
139 VERIFY( b2
== false );
140 VERIFY( *end
== L
'2' );
143 iss3
.setf(ios_base::boolalpha
);
144 err
= ios_base::goodbit
;
145 end
= ng3
.get(iss3
.rdbuf(), 0, iss3
, err
, b3
);
146 VERIFY( err
== ios_base::failbit
);
147 VERIFY( b3
== false );
148 VERIFY( *end
== L
'b' );
153 err
= ios_base::goodbit
;
154 end
= ng3
.get(iss3
.rdbuf(), 0, iss3
, err
, b3
);
155 VERIFY( err
== ios_base::failbit
);
156 VERIFY( b3
== false );
159 iss4
.setf(ios_base::boolalpha
);
160 err
= ios_base::goodbit
;
161 end
= ng4
.get(iss4
.rdbuf(), 0, iss4
, err
, b4
);
162 VERIFY( err
== ios_base::goodbit
);
163 VERIFY( b4
== true );
167 err
= ios_base::goodbit
;
168 end
= ng4
.get(iss4
.rdbuf(), 0, iss4
, err
, b4
);
169 VERIFY( err
== ios_base::goodbit
);
170 VERIFY( b4
== false );
175 err
= ios_base::goodbit
;
176 end
= ng4
.get(iss4
.rdbuf(), 0, iss4
, err
, b4
);
177 VERIFY( err
== ios_base::failbit
);
178 VERIFY( b4
== false );
179 VERIFY( *end
== L
'h' );
184 err
= ios_base::goodbit
;
185 end
= ng4
.get(iss4
.rdbuf(), 0, iss4
, err
, b4
);
186 VERIFY( err
== (ios_base::failbit
| ios_base::eofbit
) );
187 VERIFY( b4
== false );