get_year.pass.cpp revision 83e2c4d877fe2d7793868b1c6a5d9525a7c4d431
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 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[] = "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