get_one_wide.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <locale>
11
12// class time_get_byname<charT, InputIterator>
13
14// iter_type get(iter_type s, iter_type end, ios_base& f,
15//               ios_base::iostate& err, tm *t, char format, char modifier = 0) const;
16
17#include <locale>
18#include <cassert>
19#include "iterators.h"
20
21typedef input_iterator<const wchar_t*> I;
22
23typedef std::time_get_byname<wchar_t, I> F;
24
25class my_facet
26    : public F
27{
28public:
29    explicit my_facet(const std::string& nm, std::size_t refs = 0)
30        : F(nm, refs) {}
31};
32
33int main()
34{
35    std::ios ios(0);
36    std::ios_base::iostate err;
37    std::tm t;
38    {
39        const my_facet f("en_US", 1);
40        const wchar_t in[] = L"Sat Dec 31 23:55:59 2061";
41        err = std::ios_base::goodbit;
42        t = std::tm();
43        I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c');
44        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
45        assert(t.tm_sec == 59);
46        assert(t.tm_min == 55);
47        assert(t.tm_hour == 23);
48        assert(t.tm_mday == 31);
49        assert(t.tm_mon == 11);
50        assert(t.tm_year == 161);
51        assert(t.tm_wday == 6);
52        assert(err == std::ios_base::eofbit);
53    }
54    {
55        const my_facet f("en_US", 1);
56        const wchar_t in[] = L"23:55:59";
57        err = std::ios_base::goodbit;
58        t = std::tm();
59        I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X');
60        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
61        assert(t.tm_sec == 59);
62        assert(t.tm_min == 55);
63        assert(t.tm_hour == 23);
64        assert(err == std::ios_base::eofbit);
65    }
66    {
67        const my_facet f("fr_FR", 1);
68        const wchar_t in[] = L"Sam 31 d""\xE9""c 23:55:59 2061";
69        err = std::ios_base::goodbit;
70        t = std::tm();
71        I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c');
72        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
73        assert(t.tm_sec == 59);
74        assert(t.tm_min == 55);
75        assert(t.tm_hour == 23);
76        assert(t.tm_mday == 31);
77        assert(t.tm_mon == 11);
78        assert(t.tm_year == 161);
79        assert(t.tm_wday == 6);
80        assert(err == std::ios_base::eofbit);
81    }
82    {
83        const my_facet f("fr_FR", 1);
84        const wchar_t in[] = L"23:55:59";
85        err = std::ios_base::goodbit;
86        t = std::tm();
87        I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X');
88        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
89        assert(t.tm_sec == 59);
90        assert(t.tm_min == 55);
91        assert(t.tm_hour == 23);
92        assert(err == std::ios_base::eofbit);
93    }
94    {
95        const my_facet f("ru_RU", 1);
96        const wchar_t in[] = L"\x441\x443\x431\x431\x43E\x442\x430"
97                          ", 31 "
98                          "\x434\x435\x43A\x430\x431\x440\x44F"
99                          " 2061 "
100                          "\x433"
101                          ". 23:55:59";
102        err = std::ios_base::goodbit;
103        t = std::tm();
104        I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c');
105        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
106        assert(t.tm_sec == 59);
107        assert(t.tm_min == 55);
108        assert(t.tm_hour == 23);
109        assert(t.tm_mday == 31);
110        assert(t.tm_mon == 11);
111        assert(t.tm_year == 161);
112        assert(t.tm_wday == 6);
113        assert(err == std::ios_base::eofbit);
114    }
115    {
116        const my_facet f("ru_RU", 1);
117        const wchar_t in[] = L"23:55:59";
118        err = std::ios_base::goodbit;
119        t = std::tm();
120        I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X');
121        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
122        assert(t.tm_sec == 59);
123        assert(t.tm_min == 55);
124        assert(t.tm_hour == 23);
125        assert(err == std::ios_base::eofbit);
126    }
127    {
128        const my_facet f("zh_CN", 1);
129        const wchar_t in[] = L"\x516D"
130                          " 12/31 23:55:59 2061";
131        err = std::ios_base::goodbit;
132        t = std::tm();
133        I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c');
134        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
135        assert(t.tm_sec == 59);
136        assert(t.tm_min == 55);
137        assert(t.tm_hour == 23);
138        assert(t.tm_mday == 31);
139        assert(t.tm_mon == 11);
140        assert(t.tm_year == 161);
141        assert(t.tm_wday == 6);
142        assert(err == std::ios_base::eofbit);
143    }
144    {
145        const my_facet f("zh_CN", 1);
146        const wchar_t in[] = L"23""\x65F6""55""\x5206""59""\x79D2";
147        err = std::ios_base::goodbit;
148        t = std::tm();
149        I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X');
150        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
151        assert(t.tm_sec == 59);
152        assert(t.tm_min == 55);
153        assert(t.tm_hour == 23);
154        assert(err == std::ios_base::eofbit);
155    }
156}
157