put_time.pass.cpp revision c0d0cbad9ed434267a7af9531bdeeae52eb6d706
15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// The LLVM Compiler Infrastructure 45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is dual licensed under the MIT and the University of Illinois Open 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// Source Licenses. See LICENSE.TXT for details. 75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// 85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer//===----------------------------------------------------------------------===// 95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// <iomanip> 115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// template <class charT> T10 put_time(const struct tm* tmb, const charT* fmt); 135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <iomanip> 155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include <cassert> 165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "../../../platform_support.h" // locale name macros 18eb50ed88c2aa040fac08bf2a50bde4dd3da6eb19Chris Lattner 195d75de0f821023f4ed4815825bf3aea8a0b5e40dChris Lattnertemplate <class CharT> 20c7229c338c21ef26b01ef3ecf9eec4fd373fa9ecChris Lattnerclass testbuf 215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer : public std::basic_streambuf<CharT> 22cc1a875f94630e58d24a55577ffbf0e89b7da8c7Chris Lattner{ 235f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer typedef std::basic_streambuf<CharT> base; 245f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer std::basic_string<CharT> str_; 255f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerpublic: 265f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer testbuf() 275f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 285f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 295f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 305f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer std::basic_string<CharT> str() const 315f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer {return std::basic_string<CharT>(base::pbase(), base::pptr());} 325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 335f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerprotected: 345f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 355f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer virtual typename base::int_type 365f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer overflow(typename base::int_type __c = base::traits_type::eof()) 37e5956bd2730c051835f9acd9e957c5d79f99e7c3Chris Lattner { 385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer if (__c != base::traits_type::eof()) 395f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 405f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer int n = str_.size(); 415f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer str_.push_back(__c); 425f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer str_.resize(str_.capacity()); 435f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::setp(const_cast<CharT*>(str_.data()), 445f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer const_cast<CharT*>(str_.data() + str_.size())); 455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer base::pbump(n+1); 465f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 475f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer return __c; 485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 495f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer}; 505f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer 515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerint main() 525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer{ 535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer testbuf<char> sb; 555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer std::ostream os(&sb); 565f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer os.imbue(std::locale(LOCALE_en_US_UTF_8)); 575f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer std::tm t = {0}; 585f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_sec = 59; 595f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_min = 55; 605f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_hour = 23; 615f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_mday = 31; 625f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_mon = 11; 635f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_year = 161; 645f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_wday = 6; 655f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer os << std::put_time(&t, "%c"); 665f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer assert(sb.str() == "Sat Dec 31 23:55:59 2061"); 675f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer } 685f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer { 695f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer testbuf<wchar_t> sb; 705f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer std::wostream os(&sb); 715f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer os.imbue(std::locale(LOCALE_en_US_UTF_8)); 725f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer std::tm t = {0}; 735f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_sec = 59; 7403db1b31dd926409b7defc1c90b66549464652c0Argyrios Kyrtzidis t.tm_min = 55; 7503db1b31dd926409b7defc1c90b66549464652c0Argyrios Kyrtzidis t.tm_hour = 23; 7603db1b31dd926409b7defc1c90b66549464652c0Argyrios Kyrtzidis t.tm_mday = 31; 775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_mon = 11; 785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_year = 161; 795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer t.tm_wday = 6; 805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer os << std::put_time(&t, L"%c"); 8168d331a78e655d97294e94fcfa63f92cc1f40578Steve Naroff assert(sb.str() == L"Sat Dec 31 23:55:59 2061"); 8268d331a78e655d97294e94fcfa63f92cc1f40578Steve Naroff } 8368d331a78e655d97294e94fcfa63f92cc1f40578Steve Naroff} 8468d331a78e655d97294e94fcfa63f92cc1f40578Steve Naroff