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_weekday(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 char*> I;
23
24typedef std::time_get<char, 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 char in[] = "Sun";
42        err = std::ios_base::goodbit;
43        t = std::tm();
44        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Suny";
51        err = std::ios_base::goodbit;
52        t = std::tm();
53        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Sund";
60        err = std::ios_base::goodbit;
61        t = std::tm();
62        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "sun";
69        err = std::ios_base::goodbit;
70        t = std::tm();
71        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "sunday";
78        err = std::ios_base::goodbit;
79        t = std::tm();
80        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Mon";
87        err = std::ios_base::goodbit;
88        t = std::tm();
89        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Mony";
96        err = std::ios_base::goodbit;
97        t = std::tm();
98        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Mond";
105        err = std::ios_base::goodbit;
106        t = std::tm();
107        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "mon";
114        err = std::ios_base::goodbit;
115        t = std::tm();
116        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "monday";
123        err = std::ios_base::goodbit;
124        t = std::tm();
125        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Tue";
132        err = std::ios_base::goodbit;
133        t = std::tm();
134        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Tuesday";
141        err = std::ios_base::goodbit;
142        t = std::tm();
143        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Wed";
150        err = std::ios_base::goodbit;
151        t = std::tm();
152        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Wednesday";
159        err = std::ios_base::goodbit;
160        t = std::tm();
161        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Thu";
168        err = std::ios_base::goodbit;
169        t = std::tm();
170        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Thursday";
177        err = std::ios_base::goodbit;
178        t = std::tm();
179        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Fri";
186        err = std::ios_base::goodbit;
187        t = std::tm();
188        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Friday";
195        err = std::ios_base::goodbit;
196        t = std::tm();
197        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Sat";
204        err = std::ios_base::goodbit;
205        t = std::tm();
206        I i = f.get_weekday(I(in), I(in+sizeof(in)-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 char in[] = "Saturday";
213        err = std::ios_base::goodbit;
214        t = std::tm();
215        I i = f.get_weekday(I(in), I(in+sizeof(in)-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