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