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 get_year(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_iterators.h"
20
21 typedef input_iterator<const char*> I;
22
23 typedef std::time_get<char, I> F;
24
25 class my_facet
26 : public F
27 {
28 public:
my_facet(std::size_t refs=0)29 explicit my_facet(std::size_t refs = 0)
30 : F(refs) {}
31 };
32
main()33 int main()
34 {
35 const my_facet f(1);
36 std::ios ios(0);
37 std::ios_base::iostate err;
38 std::tm t;
39 {
40 const char in[] = "0";
41 err = std::ios_base::goodbit;
42 t = std::tm();
43 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
44 assert(i.base() == in+sizeof(in)-1);
45 assert(t.tm_year == 100);
46 assert(err == std::ios_base::eofbit);
47 }
48 {
49 const char in[] = "00";
50 err = std::ios_base::goodbit;
51 t = std::tm();
52 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
53 assert(i.base() == in+sizeof(in)-1);
54 assert(t.tm_year == 100);
55 assert(err == std::ios_base::eofbit);
56 }
57 {
58 const char in[] = "1";
59 err = std::ios_base::goodbit;
60 t = std::tm();
61 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
62 assert(i.base() == in+sizeof(in)-1);
63 assert(t.tm_year == 101);
64 assert(err == std::ios_base::eofbit);
65 }
66 {
67 const char in[] = "68";
68 err = std::ios_base::goodbit;
69 t = std::tm();
70 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
71 assert(i.base() == in+sizeof(in)-1);
72 assert(t.tm_year == 168);
73 assert(err == std::ios_base::eofbit);
74 }
75 {
76 const char in[] = "69";
77 err = std::ios_base::goodbit;
78 t = std::tm();
79 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
80 assert(i.base() == in+sizeof(in)-1);
81 assert(t.tm_year == 69);
82 assert(err == std::ios_base::eofbit);
83 }
84 {
85 const char in[] = "99";
86 err = std::ios_base::goodbit;
87 t = std::tm();
88 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
89 assert(i.base() == in+sizeof(in)-1);
90 assert(t.tm_year == 99);
91 assert(err == std::ios_base::eofbit);
92 }
93 {
94 const char in[] = "100";
95 err = std::ios_base::goodbit;
96 t = std::tm();
97 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
98 assert(i.base() == in+sizeof(in)-1);
99 assert(t.tm_year == -1800);
100 assert(err == std::ios_base::eofbit);
101 }
102 {
103 const char in[] = "1900";
104 err = std::ios_base::goodbit;
105 t = std::tm();
106 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
107 assert(i.base() == in+sizeof(in)-1);
108 assert(t.tm_year == 0);
109 assert(err == std::ios_base::eofbit);
110 }
111 {
112 const char in[] = "1968";
113 err = std::ios_base::goodbit;
114 t = std::tm();
115 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
116 assert(i.base() == in+sizeof(in)-1);
117 assert(t.tm_year == 68);
118 assert(err == std::ios_base::eofbit);
119 }
120 {
121 const char in[] = "2000";
122 err = std::ios_base::goodbit;
123 t = std::tm();
124 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
125 assert(i.base() == in+sizeof(in)-1);
126 assert(t.tm_year == 100);
127 assert(err == std::ios_base::eofbit);
128 }
129 {
130 const char in[] = "2999c";
131 err = std::ios_base::goodbit;
132 t = std::tm();
133 I i = f.get_year(I(in), I(in+sizeof(in)-1), ios, err, &t);
134 assert(i.base() == in+sizeof(in)-2);
135 assert(t.tm_year == 1099);
136 assert(err == std::ios_base::goodbit);
137 }
138 }
139