1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <locale>
11 
12 // class time_get<charT, InputIterator>
13 
14 // iter_type
15 // get_monthname(iter_type s, iter_type end, ios_base& str,
16 //               ios_base::iostate& err, tm* t) const;
17 
18 #include <locale>
19 #include <cassert>
20 #include "test_iterators.h"
21 
22 typedef input_iterator<const char*> I;
23 
24 typedef std::time_get<char, I> F;
25 
26 class my_facet
27     : public F
28 {
29 public:
30     explicit my_facet(std::size_t refs = 0)
31         : F(refs) {}
32 };
33 
34 int main()
35 {
36     const my_facet f(1);
37     std::ios ios(0);
38     std::ios_base::iostate err;
39     std::tm t;
40     {
41         const char in[] = "Jan";
42         err = std::ios_base::goodbit;
43         t = std::tm();
44         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
45         assert(i.base() == in+3);
46         assert(t.tm_mon == 0);
47         assert(err == std::ios_base::eofbit);
48     }
49     {
50         const char in[] = "Feb";
51         err = std::ios_base::goodbit;
52         t = std::tm();
53         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
54         assert(i.base() == in+3);
55         assert(t.tm_mon == 1);
56         assert(err == std::ios_base::eofbit);
57     }
58     {
59         const char in[] = "Mar";
60         err = std::ios_base::goodbit;
61         t = std::tm();
62         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
63         assert(i.base() == in+3);
64         assert(t.tm_mon == 2);
65         assert(err == std::ios_base::eofbit);
66     }
67     {
68         const char in[] = "Apr";
69         err = std::ios_base::goodbit;
70         t = std::tm();
71         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
72         assert(i.base() == in+3);
73         assert(t.tm_mon == 3);
74         assert(err == std::ios_base::eofbit);
75     }
76     {
77         const char in[] = "May";
78         err = std::ios_base::goodbit;
79         t = std::tm();
80         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
81         assert(i.base() == in+3);
82         assert(t.tm_mon == 4);
83         assert(err == std::ios_base::eofbit);
84     }
85     {
86         const char in[] = "Jun";
87         err = std::ios_base::goodbit;
88         t = std::tm();
89         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
90         assert(i.base() == in+3);
91         assert(t.tm_mon == 5);
92         assert(err == std::ios_base::eofbit);
93     }
94     {
95         const char in[] = "Jul";
96         err = std::ios_base::goodbit;
97         t = std::tm();
98         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
99         assert(i.base() == in+3);
100         assert(t.tm_mon == 6);
101         assert(err == std::ios_base::eofbit);
102     }
103     {
104         const char in[] = "Aug";
105         err = std::ios_base::goodbit;
106         t = std::tm();
107         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
108         assert(i.base() == in+3);
109         assert(t.tm_mon == 7);
110         assert(err == std::ios_base::eofbit);
111     }
112     {
113         const char in[] = "Sep";
114         err = std::ios_base::goodbit;
115         t = std::tm();
116         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
117         assert(i.base() == in+3);
118         assert(t.tm_mon == 8);
119         assert(err == std::ios_base::eofbit);
120     }
121     {
122         const char in[] = "Oct";
123         err = std::ios_base::goodbit;
124         t = std::tm();
125         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
126         assert(i.base() == in+3);
127         assert(t.tm_mon == 9);
128         assert(err == std::ios_base::eofbit);
129     }
130     {
131         const char in[] = "Nov";
132         err = std::ios_base::goodbit;
133         t = std::tm();
134         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
135         assert(i.base() == in+3);
136         assert(t.tm_mon == 10);
137         assert(err == std::ios_base::eofbit);
138     }
139     {
140         const char in[] = "Dec";
141         err = std::ios_base::goodbit;
142         t = std::tm();
143         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
144         assert(i.base() == in+3);
145         assert(t.tm_mon == 11);
146         assert(err == std::ios_base::eofbit);
147     }
148     {
149         const char in[] = "January";
150         err = std::ios_base::goodbit;
151         t = std::tm();
152         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
153         assert(i.base() == in+7);
154         assert(t.tm_mon == 0);
155         assert(err == std::ios_base::eofbit);
156     }
157     {
158         const char in[] = "February";
159         err = std::ios_base::goodbit;
160         t = std::tm();
161         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
162         assert(i.base() == in+8);
163         assert(t.tm_mon == 1);
164         assert(err == std::ios_base::eofbit);
165     }
166     {
167         const char in[] = "March";
168         err = std::ios_base::goodbit;
169         t = std::tm();
170         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
171         assert(i.base() == in+5);
172         assert(t.tm_mon == 2);
173         assert(err == std::ios_base::eofbit);
174     }
175     {
176         const char in[] = "April";
177         err = std::ios_base::goodbit;
178         t = std::tm();
179         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
180         assert(i.base() == in+5);
181         assert(t.tm_mon == 3);
182         assert(err == std::ios_base::eofbit);
183     }
184     {
185         const char in[] = "May";
186         err = std::ios_base::goodbit;
187         t = std::tm();
188         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
189         assert(i.base() == in+3);
190         assert(t.tm_mon == 4);
191         assert(err == std::ios_base::eofbit);
192     }
193     {
194         const char in[] = "June";
195         err = std::ios_base::goodbit;
196         t = std::tm();
197         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
198         assert(i.base() == in+4);
199         assert(t.tm_mon == 5);
200         assert(err == std::ios_base::eofbit);
201     }
202     {
203         const char in[] = "July";
204         err = std::ios_base::goodbit;
205         t = std::tm();
206         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
207         assert(i.base() == in+4);
208         assert(t.tm_mon == 6);
209         assert(err == std::ios_base::eofbit);
210     }
211     {
212         const char in[] = "August";
213         err = std::ios_base::goodbit;
214         t = std::tm();
215         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
216         assert(i.base() == in+6);
217         assert(t.tm_mon == 7);
218         assert(err == std::ios_base::eofbit);
219     }
220     {
221         const char in[] = "September";
222         err = std::ios_base::goodbit;
223         t = std::tm();
224         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
225         assert(i.base() == in+9);
226         assert(t.tm_mon == 8);
227         assert(err == std::ios_base::eofbit);
228     }
229     {
230         const char in[] = "October";
231         err = std::ios_base::goodbit;
232         t = std::tm();
233         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
234         assert(i.base() == in+7);
235         assert(t.tm_mon == 9);
236         assert(err == std::ios_base::eofbit);
237     }
238     {
239         const char in[] = "November";
240         err = std::ios_base::goodbit;
241         t = std::tm();
242         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
243         assert(i.base() == in+8);
244         assert(t.tm_mon == 10);
245         assert(err == std::ios_base::eofbit);
246     }
247     {
248         const char in[] = "December";
249         err = std::ios_base::goodbit;
250         t = std::tm();
251         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
252         assert(i.base() == in+8);
253         assert(t.tm_mon == 11);
254         assert(err == std::ios_base::eofbit);
255     }
256     {
257         const char in[] = "Decemper";
258         err = std::ios_base::goodbit;
259         t = std::tm();
260         I i = f.get_monthname(I(in), I(in+sizeof(in)-1), ios, err, &t);
261         assert(i.base() == in+5);
262         assert(t.tm_mon == 0);
263         assert(err == std::ios_base::failbit);
264     }
265 }
266