1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <locale> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class time_get<charT, InputIterator> 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iter_type 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// get_time(iter_type s, iter_type end, ios_base& str, 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// ios_base::iostate& err, tm* t) const; 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <locale> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 2083e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h" 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef input_iterator<const wchar_t*> I; 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttypedef std::time_get<wchar_t, I> F; 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass my_facet 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public F 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit my_facet(std::size_t refs = 0) 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : F(refs) {} 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const my_facet f(1); 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios ios(0); 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::ios_base::iostate err; 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant std::tm t; 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const wchar_t in[] = L"0:0:0"; 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant err = std::ios_base::goodbit; 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant t = std::tm(); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i.base() == in+sizeof(in)/sizeof(in[0])-1); 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_hour == 0); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_min == 0); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_sec == 0); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == std::ios_base::eofbit); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const wchar_t in[] = L"23:59:60"; 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant err = std::ios_base::goodbit; 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant t = std::tm(); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t); 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i.base() == in+sizeof(in)/sizeof(in[0])-1); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_hour == 23); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_min == 59); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_sec == 60); 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == std::ios_base::eofbit); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const wchar_t in[] = L"24:59:60"; 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant err = std::ios_base::goodbit; 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant t = std::tm(); 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i.base() == in+2); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_hour == 0); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_min == 0); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_sec == 0); 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == std::ios_base::failbit); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const wchar_t in[] = L"23:60:60"; 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant err = std::ios_base::goodbit; 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant t = std::tm(); 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t); 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i.base() == in+5); 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_hour == 0); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_min == 0); 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_sec == 0); 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == std::ios_base::failbit); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const wchar_t in[] = L"23:59:61"; 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant err = std::ios_base::goodbit; 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant t = std::tm(); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t); 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i.base() == in+8); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_hour == 0); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_min == 0); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_sec == 0); 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == (std::ios_base::failbit | std::ios_base::eofbit)); 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const wchar_t in[] = L"2:43:221"; 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant err = std::ios_base::goodbit; 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant t = std::tm(); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t); 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i.base() == in+7); 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_hour == 2); 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_min == 43); 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(t.tm_sec == 22); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == std::ios_base::goodbit); 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const wchar_t in[] = L"2.43:221"; 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant err = std::ios_base::goodbit; 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant t = std::tm(); 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t); 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i.base() == in+1); 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_hour == 0); 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_min == 0); 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// assert(t.tm_sec == 0); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(err == std::ios_base::failbit); 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 118