1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
11 // XFAIL: with_system_cxx_lib=macosx10.7
15 // class num_get<charT, InputIterator>
17 // iter_type get(iter_type in, iter_type end, ios_base&,
18 // ios_base::iostate& err, float& v) const;
25 #include "test_iterators.h"
28 typedef std::num_get<char, input_iterator<const char*> > F;
34 explicit my_facet(std::size_t refs = 0)
45 const char str[] = "123";
46 assert((ios.flags() & ios.basefield) == ios.dec);
47 assert(ios.getloc().name() == "C");
48 std::ios_base::iostate err = ios.goodbit;
49 input_iterator<const char*> iter =
50 f.get(input_iterator<const char*>(str),
51 input_iterator<const char*>(str+sizeof(str)),
53 assert(iter.base() == str+sizeof(str)-1);
54 assert(err == ios.goodbit);
58 const char str[] = "-123";
59 std::ios_base::iostate err = ios.goodbit;
60 input_iterator<const char*> iter =
61 f.get(input_iterator<const char*>(str),
62 input_iterator<const char*>(str+sizeof(str)),
64 assert(iter.base() == str+sizeof(str)-1);
65 assert(err == ios.goodbit);
69 const char str[] = "123.5";
70 std::ios_base::iostate err = ios.goodbit;
71 input_iterator<const char*> iter =
72 f.get(input_iterator<const char*>(str),
73 input_iterator<const char*>(str+sizeof(str)),
75 assert(iter.base() == str+sizeof(str)-1);
76 assert(err == ios.goodbit);
80 const char str[] = "125e-1";
82 std::ios_base::iostate err = ios.goodbit;
83 input_iterator<const char*> iter =
84 f.get(input_iterator<const char*>(str),
85 input_iterator<const char*>(str+sizeof(str)),
87 assert(iter.base() == str+sizeof(str)-1);
88 assert(err == ios.goodbit);
92 const char str[] = "0x125p-1";
94 std::ios_base::iostate err = ios.goodbit;
95 input_iterator<const char*> iter =
96 f.get(input_iterator<const char*>(str),
97 input_iterator<const char*>(str+sizeof(str)),
99 assert(iter.base() == str+sizeof(str)-1);
100 assert(err == ios.goodbit);
101 assert(v == hexfloat<float>(0x125, 0, -1));
104 const char str[] = "inf";
106 std::ios_base::iostate err = ios.goodbit;
107 input_iterator<const char*> iter =
108 f.get(input_iterator<const char*>(str),
109 input_iterator<const char*>(str+sizeof(str)),
111 assert(iter.base() == str+sizeof(str)-1);
112 assert(err == ios.goodbit);
113 assert(v == INFINITY);
116 const char str[] = "INF";
118 std::ios_base::iostate err = ios.goodbit;
119 input_iterator<const char*> iter =
120 f.get(input_iterator<const char*>(str),
121 input_iterator<const char*>(str+sizeof(str)),
123 assert(iter.base() == str+sizeof(str)-1);
124 assert(err == ios.goodbit);
125 assert(v == INFINITY);
128 const char str[] = "-inf";
130 std::ios_base::iostate err = ios.goodbit;
131 input_iterator<const char*> iter =
132 f.get(input_iterator<const char*>(str),
133 input_iterator<const char*>(str+sizeof(str)),
135 assert(iter.base() == str+sizeof(str)-1);
136 assert(err == ios.goodbit);
137 assert(v == -INFINITY);
140 const char str[] = "-INF";
142 std::ios_base::iostate err = ios.goodbit;
143 input_iterator<const char*> iter =
144 f.get(input_iterator<const char*>(str),
145 input_iterator<const char*>(str+sizeof(str)),
147 assert(iter.base() == str+sizeof(str)-1);
148 assert(err == ios.goodbit);
149 assert(v == -INFINITY);
152 const char str[] = "nan";
154 std::ios_base::iostate err = ios.goodbit;
155 input_iterator<const char*> iter =
156 f.get(input_iterator<const char*>(str),
157 input_iterator<const char*>(str+sizeof(str)),
159 assert(iter.base() == str+sizeof(str)-1);
160 assert(err == ios.goodbit);
161 assert(std::isnan(v));
164 const char str[] = "NAN";
166 std::ios_base::iostate err = ios.goodbit;
167 input_iterator<const char*> iter =
168 f.get(input_iterator<const char*>(str),
169 input_iterator<const char*>(str+sizeof(str)),
171 assert(iter.base() == str+sizeof(str)-1);
172 assert(err == ios.goodbit);
173 assert(std::isnan(v));
177 const char str[] = "3.40283e+39"; // unrepresentable
178 std::ios_base::iostate err = ios.goodbit;
179 input_iterator<const char*> iter =
180 f.get(input_iterator<const char*>(str),
181 input_iterator<const char*>(str+sizeof(str)),
183 assert(iter.base() == str+sizeof(str)-1);
184 assert(err == ios.failbit);
185 assert(v == HUGE_VALF);
189 const char str[] = "-3.40283e+38"; // unrepresentable
190 std::ios_base::iostate err = ios.goodbit;
191 input_iterator<const char*> iter =
192 f.get(input_iterator<const char*>(str),
193 input_iterator<const char*>(str+sizeof(str)),
195 assert(iter.base() == str+sizeof(str)-1);
196 assert(err == ios.failbit);
197 assert(v == -HUGE_VALF);
202 const char str[] = "2-";
203 std::ios_base::iostate err = ios.goodbit;
204 input_iterator<const char*> iter =
205 f.get(input_iterator<const char*>(str),
206 input_iterator<const char*>(str+sizeof(str)),
208 assert(iter.base() == str+1);
209 assert(err == ios.goodbit);