get_one.pass.cpp revision 22a74dcf50ff4338767607fa5a9d2916c2c85525
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <locale>
11
12// class time_get<charT, InputIterator>
13
14// iter_type get(iter_type s, iter_type end, ios_base& f,
15//               ios_base::iostate& err, tm *t, char format, char modifier = 0) const;
16
17#include <locale>
18#include <cassert>
19#include "iterators.h"
20
21typedef input_iterator<const char*> I;
22
23typedef std::time_get<char, I> F;
24
25class my_facet
26    : public F
27{
28public:
29    explicit my_facet(std::size_t refs = 0)
30        : F(refs) {}
31};
32
33int main()
34{
35    const my_facet f(1);
36    std::ios ios(0);
37    std::ios_base::iostate err;
38    std::tm t;
39    {
40        const char in[] = "mon";
41        err = std::ios_base::goodbit;
42        t = std::tm();
43        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'a');
44        assert(i.base() == in+sizeof(in)-1);
45        assert(t.tm_wday == 1);
46        assert(err == std::ios_base::eofbit);
47    }
48    {
49        const char in[] = "wednesdaY";
50        err = std::ios_base::goodbit;
51        t = std::tm();
52        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'A');
53        assert(i.base() == in+sizeof(in)-1);
54        assert(t.tm_wday == 3);
55        assert(err == std::ios_base::eofbit);
56    }
57    {
58        const char in[] = "June";
59        err = std::ios_base::goodbit;
60        t = std::tm();
61        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'b');
62        assert(i.base() == in+sizeof(in)-1);
63        assert(t.tm_mon == 5);
64        assert(err == std::ios_base::eofbit);
65    }
66    {
67        const char in[] = "Jul";
68        err = std::ios_base::goodbit;
69        t = std::tm();
70        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'B');
71        assert(i.base() == in+sizeof(in)-1);
72        assert(t.tm_mon == 6);
73        assert(err == std::ios_base::eofbit);
74    }
75    {
76        const char in[] = "Thu Jun  6 09:49:10 2009";
77        err = std::ios_base::goodbit;
78        t = std::tm();
79        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'c');
80        assert(i.base() == in+sizeof(in)-1);
81        assert(t.tm_wday == 4);
82        assert(t.tm_mon == 5);
83        assert(t.tm_mday == 6);
84        assert(t.tm_hour == 9);
85        assert(t.tm_min == 49);
86        assert(t.tm_sec == 10);
87        assert(t.tm_year == 109);
88        assert(err == std::ios_base::eofbit);
89    }
90    {
91        const char in[] = "11";
92        err = std::ios_base::goodbit;
93        t = std::tm();
94        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'd');
95        assert(i.base() == in+sizeof(in)-1);
96        assert(t.tm_mday == 11);
97        assert(err == std::ios_base::eofbit);
98    }
99    {
100        const char in[] = "2/1/1";
101        err = std::ios_base::goodbit;
102        t = std::tm();
103        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'D');
104        assert(i.base() == in+sizeof(in)-1);
105        assert(t.tm_mon == 1);
106        assert(t.tm_mday == 1);
107        assert(t.tm_year == 101);
108        assert(err == std::ios_base::eofbit);
109    }
110    {
111        const char in[] = "11";
112        err = std::ios_base::goodbit;
113        t = std::tm();
114        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'e');
115        assert(i.base() == in+sizeof(in)-1);
116        assert(t.tm_mday == 11);
117        assert(err == std::ios_base::eofbit);
118    }
119    {
120        const char in[] = "June";
121        err = std::ios_base::goodbit;
122        t = std::tm();
123        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'h');
124        assert(i.base() == in+sizeof(in)-1);
125        assert(t.tm_mon == 5);
126        assert(err == std::ios_base::eofbit);
127    }
128    {
129        const char in[] = "19";
130        err = std::ios_base::goodbit;
131        t = std::tm();
132        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'H');
133        assert(i.base() == in+sizeof(in)-1);
134        assert(t.tm_hour == 19);
135        assert(err == std::ios_base::eofbit);
136    }
137    {
138        const char in[] = "12";
139        err = std::ios_base::goodbit;
140        t = std::tm();
141        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'm');
142        assert(i.base() == in+sizeof(in)-1);
143        assert(t.tm_mon == 11);
144        assert(err == std::ios_base::eofbit);
145    }
146    {
147        const char in[] = "59";
148        err = std::ios_base::goodbit;
149        t = std::tm();
150        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'M');
151        assert(i.base() == in+sizeof(in)-1);
152        assert(t.tm_min == 59);
153        assert(err == std::ios_base::eofbit);
154    }
155    {
156        const char in[] = "\t\n ";
157        err = std::ios_base::goodbit;
158        t = std::tm();
159        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'n');
160        assert(i.base() == in+sizeof(in)-1);
161        assert(err == std::ios_base::eofbit);
162    }
163    {
164        const char in[] = "09:49:10 PM";
165        err = std::ios_base::goodbit;
166        t = std::tm();
167        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r');
168        assert(i.base() == in+sizeof(in)-1);
169        assert(t.tm_hour == 21);
170        assert(t.tm_min == 49);
171        assert(t.tm_sec == 10);
172        assert(err == std::ios_base::eofbit);
173    }
174    {
175        const char in[] = "09:49:10 AM";
176        err = std::ios_base::goodbit;
177        t = std::tm();
178        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r');
179        assert(i.base() == in+sizeof(in)-1);
180        assert(t.tm_hour == 9);
181        assert(t.tm_min == 49);
182        assert(t.tm_sec == 10);
183        assert(err == std::ios_base::eofbit);
184    }
185    {
186        const char in[] = "12:49:10 AM";
187        err = std::ios_base::goodbit;
188        t = std::tm();
189        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r');
190        assert(i.base() == in+sizeof(in)-1);
191        assert(t.tm_hour == 0);
192        assert(t.tm_min == 49);
193        assert(t.tm_sec == 10);
194        assert(err == std::ios_base::eofbit);
195    }
196    {
197        const char in[] = "12:49:10 PM";
198        err = std::ios_base::goodbit;
199        t = std::tm();
200        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r');
201        assert(i.base() == in+sizeof(in)-1);
202        assert(t.tm_hour == 12);
203        assert(t.tm_min == 49);
204        assert(t.tm_sec == 10);
205        assert(err == std::ios_base::eofbit);
206    }
207    {
208        const char in[] = "09:49";
209        err = std::ios_base::goodbit;
210        t = std::tm();
211        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'R');
212        assert(i.base() == in+sizeof(in)-1);
213        assert(t.tm_hour == 9);
214        assert(t.tm_min == 49);
215        assert(t.tm_sec == 0);
216        assert(err == std::ios_base::eofbit);
217    }
218    {
219        const char in[] = "60";
220        err = std::ios_base::goodbit;
221        t = std::tm();
222        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'S');
223        assert(i.base() == in+sizeof(in)-1);
224        assert(t.tm_hour == 0);
225        assert(t.tm_min == 0);
226        assert(t.tm_sec == 60);
227        assert(err == std::ios_base::eofbit);
228    }
229    {
230        const char in[] = "\t\n ";
231        err = std::ios_base::goodbit;
232        t = std::tm();
233        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 't');
234        assert(i.base() == in+sizeof(in)-1);
235        assert(err == std::ios_base::eofbit);
236    }
237    {
238        const char in[] = "21:49:10";
239        err = std::ios_base::goodbit;
240        t = std::tm();
241        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'T');
242        assert(i.base() == in+sizeof(in)-1);
243        assert(t.tm_hour == 21);
244        assert(t.tm_min == 49);
245        assert(t.tm_sec == 10);
246        assert(err == std::ios_base::eofbit);
247    }
248    {
249        const char in[] = "3";
250        err = std::ios_base::goodbit;
251        t = std::tm();
252        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'w');
253        assert(i.base() == in+sizeof(in)-1);
254        assert(t.tm_wday == 3);
255        assert(err == std::ios_base::eofbit);
256    }
257    {
258        const char in[] = "06/06/09";
259        err = std::ios_base::goodbit;
260        t = std::tm();
261        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'x');
262        assert(i.base() == in+sizeof(in)-1);
263        assert(t.tm_mon == 5);
264        assert(t.tm_mday == 6);
265        assert(t.tm_year == 109);
266        assert(err == std::ios_base::eofbit);
267    }
268    {
269        const char in[] = "21:49:10";
270        err = std::ios_base::goodbit;
271        t = std::tm();
272        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'X');
273        assert(i.base() == in+sizeof(in)-1);
274        assert(t.tm_hour == 21);
275        assert(t.tm_min == 49);
276        assert(t.tm_sec == 10);
277        assert(err == std::ios_base::eofbit);
278    }
279    {
280        const char in[] = "68";
281        err = std::ios_base::goodbit;
282        t = std::tm();
283        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'y');
284        assert(i.base() == in+sizeof(in)-1);
285        assert(t.tm_year == 168);
286        assert(err == std::ios_base::eofbit);
287    }
288    {
289        const char in[] = "68";
290        err = std::ios_base::goodbit;
291        t = std::tm();
292        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'Y');
293        assert(i.base() == in+sizeof(in)-1);
294        assert(t.tm_year == -1832);
295        assert(err == std::ios_base::eofbit);
296    }
297    {
298        const char in[] = "%";
299        err = std::ios_base::goodbit;
300        t = std::tm();
301        I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, '%');
302        assert(i.base() == in+sizeof(in)-1);
303        assert(err == std::ios_base::eofbit);
304    }
305}
306