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_weekday(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 cpp17_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"Sun";
42         err = std::ios_base::goodbit;
43         t = std::tm();
44         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
45         assert(i.base() == in+3);
46         assert(t.tm_wday == 0);
47         assert(err == std::ios_base::eofbit);
48     }
49     {
50         const wchar_t in[] = L"Suny";
51         err = std::ios_base::goodbit;
52         t = std::tm();
53         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
54         assert(i.base() == in+3);
55         assert(t.tm_wday == 0);
56         assert(err == std::ios_base::goodbit);
57     }
58     {
59         const wchar_t in[] = L"Sund";
60         err = std::ios_base::goodbit;
61         t = std::tm();
62         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
63         assert(i.base() == in+4);
64         assert(t.tm_wday == 0);
65         assert(err == (std::ios_base::failbit | std::ios_base::eofbit));
66     }
67     {
68         const wchar_t in[] = L"sun";
69         err = std::ios_base::goodbit;
70         t = std::tm();
71         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
72         assert(i.base() == in+3);
73         assert(t.tm_wday == 0);
74         assert(err == std::ios_base::eofbit);
75     }
76     {
77         const wchar_t in[] = L"sunday";
78         err = std::ios_base::goodbit;
79         t = std::tm();
80         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
81         assert(i.base() == in+6);
82         assert(t.tm_wday == 0);
83         assert(err == std::ios_base::eofbit);
84     }
85     {
86         const wchar_t in[] = L"Mon";
87         err = std::ios_base::goodbit;
88         t = std::tm();
89         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
90         assert(i.base() == in+3);
91         assert(t.tm_wday == 1);
92         assert(err == std::ios_base::eofbit);
93     }
94     {
95         const wchar_t in[] = L"Mony";
96         err = std::ios_base::goodbit;
97         t = std::tm();
98         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
99         assert(i.base() == in+3);
100         assert(t.tm_wday == 1);
101         assert(err == std::ios_base::goodbit);
102     }
103     {
104         const wchar_t in[] = L"Mond";
105         err = std::ios_base::goodbit;
106         t = std::tm();
107         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
108         assert(i.base() == in+4);
109         assert(t.tm_wday == 0);
110         assert(err == (std::ios_base::failbit | std::ios_base::eofbit));
111     }
112     {
113         const wchar_t in[] = L"mon";
114         err = std::ios_base::goodbit;
115         t = std::tm();
116         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
117         assert(i.base() == in+3);
118         assert(t.tm_wday == 1);
119         assert(err == std::ios_base::eofbit);
120     }
121     {
122         const wchar_t in[] = L"monday";
123         err = std::ios_base::goodbit;
124         t = std::tm();
125         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
126         assert(i.base() == in+6);
127         assert(t.tm_wday == 1);
128         assert(err == std::ios_base::eofbit);
129     }
130     {
131         const wchar_t in[] = L"Tue";
132         err = std::ios_base::goodbit;
133         t = std::tm();
134         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
135         assert(i.base() == in+3);
136         assert(t.tm_wday == 2);
137         assert(err == std::ios_base::eofbit);
138     }
139     {
140         const wchar_t in[] = L"Tuesday";
141         err = std::ios_base::goodbit;
142         t = std::tm();
143         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
144         assert(i.base() == in+7);
145         assert(t.tm_wday == 2);
146         assert(err == std::ios_base::eofbit);
147     }
148     {
149         const wchar_t in[] = L"Wed";
150         err = std::ios_base::goodbit;
151         t = std::tm();
152         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
153         assert(i.base() == in+3);
154         assert(t.tm_wday == 3);
155         assert(err == std::ios_base::eofbit);
156     }
157     {
158         const wchar_t in[] = L"Wednesday";
159         err = std::ios_base::goodbit;
160         t = std::tm();
161         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
162         assert(i.base() == in+9);
163         assert(t.tm_wday == 3);
164         assert(err == std::ios_base::eofbit);
165     }
166     {
167         const wchar_t in[] = L"Thu";
168         err = std::ios_base::goodbit;
169         t = std::tm();
170         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
171         assert(i.base() == in+3);
172         assert(t.tm_wday == 4);
173         assert(err == std::ios_base::eofbit);
174     }
175     {
176         const wchar_t in[] = L"Thursday";
177         err = std::ios_base::goodbit;
178         t = std::tm();
179         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
180         assert(i.base() == in+8);
181         assert(t.tm_wday == 4);
182         assert(err == std::ios_base::eofbit);
183     }
184     {
185         const wchar_t in[] = L"Fri";
186         err = std::ios_base::goodbit;
187         t = std::tm();
188         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
189         assert(i.base() == in+3);
190         assert(t.tm_wday == 5);
191         assert(err == std::ios_base::eofbit);
192     }
193     {
194         const wchar_t in[] = L"Friday";
195         err = std::ios_base::goodbit;
196         t = std::tm();
197         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
198         assert(i.base() == in+6);
199         assert(t.tm_wday == 5);
200         assert(err == std::ios_base::eofbit);
201     }
202     {
203         const wchar_t in[] = L"Sat";
204         err = std::ios_base::goodbit;
205         t = std::tm();
206         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
207         assert(i.base() == in+3);
208         assert(t.tm_wday == 6);
209         assert(err == std::ios_base::eofbit);
210     }
211     {
212         const wchar_t in[] = L"Saturday";
213         err = std::ios_base::goodbit;
214         t = std::tm();
215         I i = f.get_weekday(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
216         assert(i.base() == in+8);
217         assert(t.tm_wday == 6);
218         assert(err == std::ios_base::eofbit);
219     }
220 
221   return 0;
222 }
223