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