1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 // <locale>
10
11 // class time_get<charT, InputIterator>
12
13 // iter_type
14 // get_monthname(iter_type s, iter_type end, ios_base& str,
15 // ios_base::iostate& err, tm* t) const;
16
17 #include <locale>
18 #include <cassert>
19 #include "test_macros.h"
20 #include "test_iterators.h"
21
22 typedef input_iterator<const wchar_t*> I;
23
24 typedef std::time_get<wchar_t, I> F;
25
26 class my_facet
27 : public F
28 {
29 public:
my_facet(std::size_t refs=0)30 explicit my_facet(std::size_t refs = 0)
31 : F(refs) {}
32 };
33
main(int,char **)34 int main(int, char**)
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 return 0;
267 }
268