get_one.pass.cpp revision 22a74dcf50ff4338767607fa5a9d2916c2c85525
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<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 char*> I; 22 23typedef std::time_get<char, I> F; 24 25class my_facet 26 : public F 27{ 28public: 29 explicit my_facet(std::size_t refs = 0) 30 : F(refs) {} 31}; 32 33int 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[] = "mon"; 41 err = std::ios_base::goodbit; 42 t = std::tm(); 43 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'a'); 44 assert(i.base() == in+sizeof(in)-1); 45 assert(t.tm_wday == 1); 46 assert(err == std::ios_base::eofbit); 47 } 48 { 49 const char in[] = "wednesdaY"; 50 err = std::ios_base::goodbit; 51 t = std::tm(); 52 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'A'); 53 assert(i.base() == in+sizeof(in)-1); 54 assert(t.tm_wday == 3); 55 assert(err == std::ios_base::eofbit); 56 } 57 { 58 const char in[] = "June"; 59 err = std::ios_base::goodbit; 60 t = std::tm(); 61 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'b'); 62 assert(i.base() == in+sizeof(in)-1); 63 assert(t.tm_mon == 5); 64 assert(err == std::ios_base::eofbit); 65 } 66 { 67 const char in[] = "Jul"; 68 err = std::ios_base::goodbit; 69 t = std::tm(); 70 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'B'); 71 assert(i.base() == in+sizeof(in)-1); 72 assert(t.tm_mon == 6); 73 assert(err == std::ios_base::eofbit); 74 } 75 { 76 const char in[] = "Thu Jun 6 09:49:10 2009"; 77 err = std::ios_base::goodbit; 78 t = std::tm(); 79 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'c'); 80 assert(i.base() == in+sizeof(in)-1); 81 assert(t.tm_wday == 4); 82 assert(t.tm_mon == 5); 83 assert(t.tm_mday == 6); 84 assert(t.tm_hour == 9); 85 assert(t.tm_min == 49); 86 assert(t.tm_sec == 10); 87 assert(t.tm_year == 109); 88 assert(err == std::ios_base::eofbit); 89 } 90 { 91 const char in[] = "11"; 92 err = std::ios_base::goodbit; 93 t = std::tm(); 94 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'd'); 95 assert(i.base() == in+sizeof(in)-1); 96 assert(t.tm_mday == 11); 97 assert(err == std::ios_base::eofbit); 98 } 99 { 100 const char in[] = "2/1/1"; 101 err = std::ios_base::goodbit; 102 t = std::tm(); 103 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'D'); 104 assert(i.base() == in+sizeof(in)-1); 105 assert(t.tm_mon == 1); 106 assert(t.tm_mday == 1); 107 assert(t.tm_year == 101); 108 assert(err == std::ios_base::eofbit); 109 } 110 { 111 const char in[] = "11"; 112 err = std::ios_base::goodbit; 113 t = std::tm(); 114 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'e'); 115 assert(i.base() == in+sizeof(in)-1); 116 assert(t.tm_mday == 11); 117 assert(err == std::ios_base::eofbit); 118 } 119 { 120 const char in[] = "June"; 121 err = std::ios_base::goodbit; 122 t = std::tm(); 123 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'h'); 124 assert(i.base() == in+sizeof(in)-1); 125 assert(t.tm_mon == 5); 126 assert(err == std::ios_base::eofbit); 127 } 128 { 129 const char in[] = "19"; 130 err = std::ios_base::goodbit; 131 t = std::tm(); 132 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'H'); 133 assert(i.base() == in+sizeof(in)-1); 134 assert(t.tm_hour == 19); 135 assert(err == std::ios_base::eofbit); 136 } 137 { 138 const char in[] = "12"; 139 err = std::ios_base::goodbit; 140 t = std::tm(); 141 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'm'); 142 assert(i.base() == in+sizeof(in)-1); 143 assert(t.tm_mon == 11); 144 assert(err == std::ios_base::eofbit); 145 } 146 { 147 const char in[] = "59"; 148 err = std::ios_base::goodbit; 149 t = std::tm(); 150 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'M'); 151 assert(i.base() == in+sizeof(in)-1); 152 assert(t.tm_min == 59); 153 assert(err == std::ios_base::eofbit); 154 } 155 { 156 const char in[] = "\t\n "; 157 err = std::ios_base::goodbit; 158 t = std::tm(); 159 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'n'); 160 assert(i.base() == in+sizeof(in)-1); 161 assert(err == std::ios_base::eofbit); 162 } 163 { 164 const char in[] = "09:49:10 PM"; 165 err = std::ios_base::goodbit; 166 t = std::tm(); 167 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r'); 168 assert(i.base() == in+sizeof(in)-1); 169 assert(t.tm_hour == 21); 170 assert(t.tm_min == 49); 171 assert(t.tm_sec == 10); 172 assert(err == std::ios_base::eofbit); 173 } 174 { 175 const char in[] = "09:49:10 AM"; 176 err = std::ios_base::goodbit; 177 t = std::tm(); 178 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r'); 179 assert(i.base() == in+sizeof(in)-1); 180 assert(t.tm_hour == 9); 181 assert(t.tm_min == 49); 182 assert(t.tm_sec == 10); 183 assert(err == std::ios_base::eofbit); 184 } 185 { 186 const char in[] = "12:49:10 AM"; 187 err = std::ios_base::goodbit; 188 t = std::tm(); 189 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r'); 190 assert(i.base() == in+sizeof(in)-1); 191 assert(t.tm_hour == 0); 192 assert(t.tm_min == 49); 193 assert(t.tm_sec == 10); 194 assert(err == std::ios_base::eofbit); 195 } 196 { 197 const char in[] = "12:49:10 PM"; 198 err = std::ios_base::goodbit; 199 t = std::tm(); 200 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'r'); 201 assert(i.base() == in+sizeof(in)-1); 202 assert(t.tm_hour == 12); 203 assert(t.tm_min == 49); 204 assert(t.tm_sec == 10); 205 assert(err == std::ios_base::eofbit); 206 } 207 { 208 const char in[] = "09:49"; 209 err = std::ios_base::goodbit; 210 t = std::tm(); 211 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'R'); 212 assert(i.base() == in+sizeof(in)-1); 213 assert(t.tm_hour == 9); 214 assert(t.tm_min == 49); 215 assert(t.tm_sec == 0); 216 assert(err == std::ios_base::eofbit); 217 } 218 { 219 const char in[] = "60"; 220 err = std::ios_base::goodbit; 221 t = std::tm(); 222 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'S'); 223 assert(i.base() == in+sizeof(in)-1); 224 assert(t.tm_hour == 0); 225 assert(t.tm_min == 0); 226 assert(t.tm_sec == 60); 227 assert(err == std::ios_base::eofbit); 228 } 229 { 230 const char in[] = "\t\n "; 231 err = std::ios_base::goodbit; 232 t = std::tm(); 233 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 't'); 234 assert(i.base() == in+sizeof(in)-1); 235 assert(err == std::ios_base::eofbit); 236 } 237 { 238 const char in[] = "21:49:10"; 239 err = std::ios_base::goodbit; 240 t = std::tm(); 241 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'T'); 242 assert(i.base() == in+sizeof(in)-1); 243 assert(t.tm_hour == 21); 244 assert(t.tm_min == 49); 245 assert(t.tm_sec == 10); 246 assert(err == std::ios_base::eofbit); 247 } 248 { 249 const char in[] = "3"; 250 err = std::ios_base::goodbit; 251 t = std::tm(); 252 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'w'); 253 assert(i.base() == in+sizeof(in)-1); 254 assert(t.tm_wday == 3); 255 assert(err == std::ios_base::eofbit); 256 } 257 { 258 const char in[] = "06/06/09"; 259 err = std::ios_base::goodbit; 260 t = std::tm(); 261 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'x'); 262 assert(i.base() == in+sizeof(in)-1); 263 assert(t.tm_mon == 5); 264 assert(t.tm_mday == 6); 265 assert(t.tm_year == 109); 266 assert(err == std::ios_base::eofbit); 267 } 268 { 269 const char in[] = "21:49:10"; 270 err = std::ios_base::goodbit; 271 t = std::tm(); 272 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'X'); 273 assert(i.base() == in+sizeof(in)-1); 274 assert(t.tm_hour == 21); 275 assert(t.tm_min == 49); 276 assert(t.tm_sec == 10); 277 assert(err == std::ios_base::eofbit); 278 } 279 { 280 const char in[] = "68"; 281 err = std::ios_base::goodbit; 282 t = std::tm(); 283 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'y'); 284 assert(i.base() == in+sizeof(in)-1); 285 assert(t.tm_year == 168); 286 assert(err == std::ios_base::eofbit); 287 } 288 { 289 const char in[] = "68"; 290 err = std::ios_base::goodbit; 291 t = std::tm(); 292 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, 'Y'); 293 assert(i.base() == in+sizeof(in)-1); 294 assert(t.tm_year == -1832); 295 assert(err == std::ios_base::eofbit); 296 } 297 { 298 const char in[] = "%"; 299 err = std::ios_base::goodbit; 300 t = std::tm(); 301 I i = f.get(I(in), I(in+sizeof(in)-1), ios, err, &t, '%'); 302 assert(i.base() == in+sizeof(in)-1); 303 assert(err == std::ios_base::eofbit); 304 } 305} 306