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_put<charT, OutputIterator>
12
13 // iter_type put(iter_type s, ios_base& str, char_type fill, const tm* t,
14 // char format, char modifier = 0) const;
15
16 #include <locale>
17 #include <cassert>
18 #include "test_macros.h"
19 #include "test_iterators.h"
20
21 typedef std::time_put<char, output_iterator<char*> > F;
22
23 class my_facet
24 : public F
25 {
26 public:
my_facet(std::size_t refs=0)27 explicit my_facet(std::size_t refs = 0)
28 : F(refs) {}
29 };
30
main(int,char **)31 int main(int, char**)
32 {
33 const my_facet f(1);
34 char str[200];
35 output_iterator<char*> iter;
36 tm t = {};
37 t.tm_sec = 6;
38 t.tm_min = 3;
39 t.tm_hour = 13;
40 t.tm_mday = 2;
41 t.tm_mon = 4;
42 t.tm_year = 109;
43 t.tm_wday = 6;
44 t.tm_yday = 121;
45 t.tm_isdst = 1;
46 std::ios ios(0);
47 {
48 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'A');
49 std::string ex(str, iter.base());
50 assert(ex == "Saturday");
51 }
52 {
53 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'a');
54 std::string ex(str, iter.base());
55 assert(ex == "Sat");
56 }
57 {
58 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'B');
59 std::string ex(str, iter.base());
60 assert(ex == "May");
61 }
62 {
63 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'b');
64 std::string ex(str, iter.base());
65 assert(ex == "May");
66 }
67 {
68 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'C');
69 std::string ex(str, iter.base());
70 assert(ex == "20");
71 }
72 {
73 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'c');
74 std::string ex(str, iter.base());
75 assert(ex == "Sat May 2 13:03:06 2009");
76 }
77 {
78 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'D');
79 std::string ex(str, iter.base());
80 assert(ex == "05/02/09");
81 }
82 {
83 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'd');
84 std::string ex(str, iter.base());
85 assert(ex == "02");
86 }
87 {
88 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'c', 'E');
89 std::string ex(str, iter.base());
90 assert(ex == "Sat May 2 13:03:06 2009");
91 }
92 {
93 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'C', 'E');
94 std::string ex(str, iter.base());
95 assert(ex == "20");
96 }
97 {
98 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'x', 'E');
99 std::string ex(str, iter.base());
100 assert(ex == "05/02/09");
101 }
102 {
103 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'X', 'E');
104 std::string ex(str, iter.base());
105 assert(ex == "13:03:06");
106 }
107 {
108 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'y', 'E');
109 std::string ex(str, iter.base());
110 assert(ex == "09");
111 }
112 {
113 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'Y', 'E');
114 std::string ex(str, iter.base());
115 assert(ex == "2009");
116 }
117 {
118 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'd', 'O');
119 std::string ex(str, iter.base());
120 assert(ex == "02");
121 }
122 {
123 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'e', 'O');
124 std::string ex(str, iter.base());
125 assert(ex == " 2");
126 }
127 {
128 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'H', 'O');
129 std::string ex(str, iter.base());
130 assert(ex == "13");
131 }
132 {
133 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'I', 'O');
134 std::string ex(str, iter.base());
135 assert(ex == "01");
136 }
137 {
138 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'm', 'O');
139 std::string ex(str, iter.base());
140 assert(ex == "05");
141 }
142 {
143 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'M', 'O');
144 std::string ex(str, iter.base());
145 assert(ex == "03");
146 }
147 {
148 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'S', 'O');
149 std::string ex(str, iter.base());
150 assert(ex == "06");
151 }
152 {
153 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'u', 'O');
154 std::string ex(str, iter.base());
155 assert(ex == "6");
156 }
157 {
158 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'U', 'O');
159 std::string ex(str, iter.base());
160 assert(ex == "17");
161 }
162 {
163 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'V', 'O');
164 std::string ex(str, iter.base());
165 assert(ex == "18");
166 }
167 {
168 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'w', 'O');
169 std::string ex(str, iter.base());
170 assert(ex == "6");
171 }
172 {
173 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'W', 'O');
174 std::string ex(str, iter.base());
175 assert(ex == "17");
176 }
177 {
178 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'y', 'O');
179 std::string ex(str, iter.base());
180 assert(ex == "09");
181 }
182 {
183 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'e');
184 std::string ex(str, iter.base());
185 assert(ex == " 2");
186 }
187 {
188 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'F');
189 std::string ex(str, iter.base());
190 assert(ex == "2009-05-02");
191 }
192 {
193 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'G');
194 std::string ex(str, iter.base());
195 assert(ex == "2009");
196 }
197 {
198 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'g');
199 std::string ex(str, iter.base());
200 assert(ex == "09");
201 }
202 {
203 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'H');
204 std::string ex(str, iter.base());
205 assert(ex == "13");
206 }
207 {
208 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'h');
209 std::string ex(str, iter.base());
210 assert(ex == "May");
211 }
212 {
213 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'I');
214 std::string ex(str, iter.base());
215 assert(ex == "01");
216 }
217 {
218 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'j');
219 std::string ex(str, iter.base());
220 assert(ex == "122");
221 }
222 {
223 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'M');
224 std::string ex(str, iter.base());
225 assert(ex == "03");
226 }
227 {
228 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'm');
229 std::string ex(str, iter.base());
230 assert(ex == "05");
231 }
232 {
233 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'n');
234 std::string ex(str, iter.base());
235 assert(ex == "\n");
236 }
237 {
238 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'p');
239 std::string ex(str, iter.base());
240 assert(ex == "PM");
241 }
242 {
243 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'R');
244 std::string ex(str, iter.base());
245 assert(ex == "13:03");
246 }
247 {
248 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'r');
249 std::string ex(str, iter.base());
250 assert(ex == "01:03:06 PM");
251 }
252 {
253 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'S');
254 std::string ex(str, iter.base());
255 assert(ex == "06");
256 }
257 {
258 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'T');
259 std::string ex(str, iter.base());
260 assert(ex == "13:03:06");
261 }
262 {
263 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 't');
264 std::string ex(str, iter.base());
265 assert(ex == "\t");
266 }
267 {
268 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'U');
269 std::string ex(str, iter.base());
270 assert(ex == "17");
271 }
272 {
273 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'u');
274 std::string ex(str, iter.base());
275 assert(ex == "6");
276 }
277 {
278 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'V');
279 std::string ex(str, iter.base());
280 assert(ex == "18");
281 }
282 {
283 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'W');
284 std::string ex(str, iter.base());
285 assert(ex == "17");
286 }
287 {
288 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'w');
289 std::string ex(str, iter.base());
290 assert(ex == "6");
291 }
292 {
293 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'X');
294 std::string ex(str, iter.base());
295 assert(ex == "13:03:06");
296 }
297 {
298 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'x');
299 std::string ex(str, iter.base());
300 assert(ex == "05/02/09");
301 }
302 {
303 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'Y');
304 std::string ex(str, iter.base());
305 assert(ex == "2009");
306 }
307 {
308 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'y');
309 std::string ex(str, iter.base());
310 assert(ex == "09");
311 }
312 {
313 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'Z');
314 std::string ex(str, iter.base());
315 // assert(ex == "EDT"); depends on time zone
316 }
317 {
318 iter = f.put(output_iterator<char*>(str), ios, '*', &t, 'z');
319 std::string ex(str, iter.base());
320 // assert(ex == "-0400"); depends on time zone
321 }
322 {
323 iter = f.put(output_iterator<char*>(str), ios, '*', &t, '+');
324 std::string ex(str, iter.base());
325 // assert(ex == "Sat May 2 13:03:06 EDT 2009"); depends on time zone
326 }
327 {
328 iter = f.put(output_iterator<char*>(str), ios, '*', &t, '%');
329 std::string ex(str, iter.base());
330 assert(ex == "%");
331 }
332
333 return 0;
334 }
335