]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/07.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 27_io / basic_istream / extractors_arithmetic / char / 07.cc
CommitLineData
6e1fc5ee 1// 1999-04-12 bkoz
2
fbd26352 3// Copyright (C) 1999-2019 Free Software Foundation, Inc.
6e1fc5ee 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
6bc9506f 8// Free Software Foundation; either version 3, or (at your option)
6e1fc5ee 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
6bc9506f 17// with this library; see the file COPYING3. If not see
18// <http://www.gnu.org/licenses/>.
6e1fc5ee 19
20// 27.6.1.2.2 arithmetic extractors
21
6e1fc5ee 22#include <istream>
6e1fc5ee 23#include <sstream>
24#include <locale>
25#include <testsuite_hooks.h>
26
6e1fc5ee 27namespace std {
28 class test_numpunct1 : public numpunct<char>
29 {
30 protected:
31 string
32 do_grouping() const
33 { return string(1, '\003'); }
34 };
35} // namespace std
36
37void test07()
38{
39 // manufactured locale, grouping is turned on
6e1fc5ee 40 unsigned int h4 = 0, h3 = 0, h2 = 0;
41 float f1 = 0.0;
42 const std::string s1("205,199 23,445.25 1,024,365 123,22,24");
43 std::istringstream is(s1);
44 is.imbue(std::locale(std::locale(), new std::test_numpunct1));
45
46 // Basic operation.
47 is >> h4;
48 VERIFY( h4 == 205199 );
49 VERIFY( is.good() );
50
51 is.clear();
52 is >> f1;
53 VERIFY( f1 == 23445.25 );
54 VERIFY( is.good() );
55
56 is.clear();
57 is >> h3;
58 VERIFY( h3 == 1024365 );
59 VERIFY( is.good() );
60
61 is.clear();
62 is >> h2;
fbaa96d6 63 VERIFY( h2 == 1232224 );
6e1fc5ee 64 VERIFY( static_cast<bool>(is.rdstate() & std::ios_base::failbit) );
65 VERIFY( static_cast<bool>(is.rdstate() & std::ios_base::eofbit) );
66
67 // Stress tests for explicit errors in grouping corner cases. The
68 // validity of these tests and results have been hammered out in
69 // private email between bkoz and ncm between Jan 25 and Jan 27, 2000.
70 // Thanks nate -- benjamin
71 const std::string s2(",111 4,,4 0.25,345 5..25 156,, 1,000000 1000000 1234,567");
72 h3 = h4 = h2 = 0;
73 f1 = 0.0;
74 const char c_control = '?';
75 char c = c_control;
76 is.clear();
77 is.str(s2);
78
79 is >> h4;
80 VERIFY( h4 == 0 );
81 VERIFY( static_cast<bool>(is.rdstate() & std::ios_base::failbit) );
82 is.clear();
83 is >> c;
84 VERIFY( c == ',' );
85 VERIFY( is.good() );
86
87 is.ignore(3);
88 is >> f1;
89 VERIFY( f1 == 0.0 );
90 VERIFY( static_cast<bool>(is.rdstate() & std::ios_base::failbit) );
91 is.clear();
92 is >> c;
93 VERIFY( c == ',' );
94 is >> c;
95 VERIFY( c == '4' );
96 VERIFY( is.good() );
97
98 is >> f1;
99 VERIFY( f1 == 0.25 );
100 VERIFY( is.good() );
101 is >> c;
102 VERIFY( c == ',' );
103 is >> h2;
104 VERIFY( h2 == 345 );
105 VERIFY( is.good() );
106 f1 = 0.0;
107 h2 = 0;
108
109 is >> f1;
110 VERIFY( f1 == 5.0 );
111 VERIFY( is.good() );
112 is >> f1;
113 VERIFY( f1 == .25 );
114 VERIFY( is.good() );
115
116 is >> h3;
117 VERIFY( h3 == 0 );
118 VERIFY( static_cast<bool>(is.rdstate() & std::ios_base::failbit) );
119 is.clear();
120 is >> c;
121 VERIFY( c == ',' ); // second one
122 VERIFY( is.good() );
123
124 is >> h2;
fbaa96d6 125 VERIFY( h2 == 1000000 );
6e1fc5ee 126 VERIFY( static_cast<bool>(is.rdstate() & std::ios_base::failbit) );
fbaa96d6 127 h2 = 0;
6e1fc5ee 128 is.clear();
129
130 is >> h2;
131 VERIFY( h2 == 1000000 );
132 VERIFY( is.good() );
133 h2 = 0;
134
135 is >> h2;
fbaa96d6 136 VERIFY( h2 == 1234567 );
6e1fc5ee 137 VERIFY( static_cast<bool>(is.rdstate() & std::ios_base::failbit) );
138 VERIFY( static_cast<bool>(is.rdstate() & std::ios_base::eofbit) );
139 is.clear();
6e1fc5ee 140}
141
142int main()
143{
144 test07();
145 return 0;
146}