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
22typedef input_iterator<const wchar_t*> I;
23
24typedef std::time_get<wchar_t, I> F;
25
26class my_facet
27    : public F
28{
29public:
30    explicit my_facet(std::size_t refs = 0)
31        : F(refs) {}
32};
33
34int 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 wchar_t in[] = L"Jan";
42        err = std::ios_base::goodbit;
43        t = std::tm();
44        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Feb";
51        err = std::ios_base::goodbit;
52        t = std::tm();
53        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Mar";
60        err = std::ios_base::goodbit;
61        t = std::tm();
62        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Apr";
69        err = std::ios_base::goodbit;
70        t = std::tm();
71        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"May";
78        err = std::ios_base::goodbit;
79        t = std::tm();
80        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Jun";
87        err = std::ios_base::goodbit;
88        t = std::tm();
89        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Jul";
96        err = std::ios_base::goodbit;
97        t = std::tm();
98        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Aug";
105        err = std::ios_base::goodbit;
106        t = std::tm();
107        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Sep";
114        err = std::ios_base::goodbit;
115        t = std::tm();
116        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Oct";
123        err = std::ios_base::goodbit;
124        t = std::tm();
125        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Nov";
132        err = std::ios_base::goodbit;
133        t = std::tm();
134        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Dec";
141        err = std::ios_base::goodbit;
142        t = std::tm();
143        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"January";
150        err = std::ios_base::goodbit;
151        t = std::tm();
152        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"February";
159        err = std::ios_base::goodbit;
160        t = std::tm();
161        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"March";
168        err = std::ios_base::goodbit;
169        t = std::tm();
170        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"April";
177        err = std::ios_base::goodbit;
178        t = std::tm();
179        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"May";
186        err = std::ios_base::goodbit;
187        t = std::tm();
188        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"June";
195        err = std::ios_base::goodbit;
196        t = std::tm();
197        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"July";
204        err = std::ios_base::goodbit;
205        t = std::tm();
206        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"August";
213        err = std::ios_base::goodbit;
214        t = std::tm();
215        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"September";
222        err = std::ios_base::goodbit;
223        t = std::tm();
224        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"October";
231        err = std::ios_base::goodbit;
232        t = std::tm();
233        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"November";
240        err = std::ios_base::goodbit;
241        t = std::tm();
242        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"December";
249        err = std::ios_base::goodbit;
250        t = std::tm();
251        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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 wchar_t in[] = L"Decemper";
258        err = std::ios_base::goodbit;
259        t = std::tm();
260        I i = f.get_monthname(I(in), I(in+sizeof(in)/sizeof(in[0])-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