get_one.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
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_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 char*> I; 22 23typedef std::time_get_byname<char, 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 char in[] = "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 char in[] = "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 char in[] = "Sam 31 d""\xC3\xA9""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 char in[] = "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 char in[] = "\xD1\x81\xD1\x83\xD0\xB1\xD0\xB1" 97 "\xD0\xBE\xD1\x82\xD0\xB0" 98 ", 31 " 99 "\xD0\xB4\xD0\xB5\xD0\xBA\xD0\xB0" 100 "\xD0\xB1\xD1\x80\xD1\x8F" 101 " 2061 " 102 "\xD0\xB3" 103 ". 23:55:59"; 104 err = std::ios_base::goodbit; 105 t = std::tm(); 106 I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c'); 107 assert(i.base() == in+sizeof(in)/sizeof(in[0])-1); 108 assert(t.tm_sec == 59); 109 assert(t.tm_min == 55); 110 assert(t.tm_hour == 23); 111 assert(t.tm_mday == 31); 112 assert(t.tm_mon == 11); 113 assert(t.tm_year == 161); 114 assert(t.tm_wday == 6); 115 assert(err == std::ios_base::eofbit); 116 } 117 { 118 const my_facet f("ru_RU", 1); 119 const char in[] = "23:55:59"; 120 err = std::ios_base::goodbit; 121 t = std::tm(); 122 I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X'); 123 assert(i.base() == in+sizeof(in)/sizeof(in[0])-1); 124 assert(t.tm_sec == 59); 125 assert(t.tm_min == 55); 126 assert(t.tm_hour == 23); 127 assert(err == std::ios_base::eofbit); 128 } 129 { 130 const my_facet f("zh_CN", 1); 131 const char in[] = "\xE5\x85\xAD" 132 " 12/31 23:55:59 2061"; 133 err = std::ios_base::goodbit; 134 t = std::tm(); 135 I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'c'); 136 assert(i.base() == in+sizeof(in)/sizeof(in[0])-1); 137 assert(t.tm_sec == 59); 138 assert(t.tm_min == 55); 139 assert(t.tm_hour == 23); 140 assert(t.tm_mday == 31); 141 assert(t.tm_mon == 11); 142 assert(t.tm_year == 161); 143 assert(t.tm_wday == 6); 144 assert(err == std::ios_base::eofbit); 145 } 146 { 147 const my_facet f("zh_CN", 1); 148 const char in[] = "23""\xE6\x97\xB6""55""\xE5\x88\x86""59""\xE7\xA7\x92"; 149 err = std::ios_base::goodbit; 150 t = std::tm(); 151 I i = f.get(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t, 'X'); 152 assert(i.base() == in+sizeof(in)/sizeof(in[0])-1); 153 assert(t.tm_sec == 59); 154 assert(t.tm_min == 55); 155 assert(t.tm_hour == 23); 156 assert(err == std::ios_base::eofbit); 157 } 158} 159