xref: /llvm-project/libcxx/test/std/input.output/iostream.format/ext.manip/get_time.pass.cpp (revision f4c1258d5633fcf06385ff3fd1f4bf57ab971964)
15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier 
961c115f3SDaniel Sanders // REQUIRES: locale.en_US.UTF-8
1061c115f3SDaniel Sanders 
115a83710eSEric Fiselier // <iomanip>
125a83710eSEric Fiselier 
135a83710eSEric Fiselier // template <class charT> T9 get_time(struct tm* tmb, const charT* fmt);
145a83710eSEric Fiselier 
155a83710eSEric Fiselier #include <iomanip>
165a127cdcSMarshall Clow #include <istream>
175a83710eSEric Fiselier #include <cassert>
185a83710eSEric Fiselier 
197fc6a556SMarshall Clow #include "test_macros.h"
205a83710eSEric Fiselier #include "platform_support.h" // locale name macros
215a83710eSEric Fiselier 
225a83710eSEric Fiselier template <class CharT>
235a83710eSEric Fiselier struct testbuf
245a83710eSEric Fiselier     : public std::basic_streambuf<CharT>
255a83710eSEric Fiselier {
265a83710eSEric Fiselier     typedef std::basic_string<CharT> string_type;
275a83710eSEric Fiselier     typedef std::basic_streambuf<CharT> base;
285a83710eSEric Fiselier private:
295a83710eSEric Fiselier     string_type str_;
305a83710eSEric Fiselier public:
315a83710eSEric Fiselier 
testbuftestbuf325a83710eSEric Fiselier     testbuf() {}
testbuftestbuf335a83710eSEric Fiselier     testbuf(const string_type& str)
345a83710eSEric Fiselier         : str_(str)
355a83710eSEric Fiselier     {
365a83710eSEric Fiselier         base::setg(const_cast<CharT*>(str_.data()),
375a83710eSEric Fiselier                    const_cast<CharT*>(str_.data()),
385a83710eSEric Fiselier                    const_cast<CharT*>(str_.data()) + str_.size());
395a83710eSEric Fiselier     }
405a83710eSEric Fiselier };
415a83710eSEric Fiselier 
main(int,char **)422df59c50SJF Bastien int main(int, char**)
435a83710eSEric Fiselier {
445a83710eSEric Fiselier     {
455a83710eSEric Fiselier         testbuf<char> sb("  Sat Dec 31 23:55:59 2061");
465a83710eSEric Fiselier         std::istream is(&sb);
475a83710eSEric Fiselier         is.imbue(std::locale(LOCALE_en_US_UTF_8));
483245e1f3SEric Fiselier         std::tm t = {};
495a83710eSEric Fiselier         is >> std::get_time(&t, "%a %b %d %H:%M:%S %Y");
505a83710eSEric Fiselier         assert(t.tm_sec == 59);
515a83710eSEric Fiselier         assert(t.tm_min == 55);
525a83710eSEric Fiselier         assert(t.tm_hour == 23);
535a83710eSEric Fiselier         assert(t.tm_mday == 31);
545a83710eSEric Fiselier         assert(t.tm_mon == 11);
555a83710eSEric Fiselier         assert(t.tm_year == 161);
565a83710eSEric Fiselier         assert(t.tm_wday == 6);
575a83710eSEric Fiselier         assert(is.eof());
585a83710eSEric Fiselier         assert(!is.fail());
595a83710eSEric Fiselier     }
60*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS
615a83710eSEric Fiselier     {
625a83710eSEric Fiselier         testbuf<wchar_t> sb(L"  Sat Dec 31 23:55:59 2061");
635a83710eSEric Fiselier         std::wistream is(&sb);
645a83710eSEric Fiselier         is.imbue(std::locale(LOCALE_en_US_UTF_8));
653245e1f3SEric Fiselier         std::tm t = {};
665a83710eSEric Fiselier         is >> std::get_time(&t, L"%a %b %d %H:%M:%S %Y");
675a83710eSEric Fiselier         assert(t.tm_sec == 59);
685a83710eSEric Fiselier         assert(t.tm_min == 55);
695a83710eSEric Fiselier         assert(t.tm_hour == 23);
705a83710eSEric Fiselier         assert(t.tm_mday == 31);
715a83710eSEric Fiselier         assert(t.tm_mon == 11);
725a83710eSEric Fiselier         assert(t.tm_year == 161);
735a83710eSEric Fiselier         assert(t.tm_wday == 6);
745a83710eSEric Fiselier         assert(is.eof());
755a83710eSEric Fiselier         assert(!is.fail());
765a83710eSEric Fiselier     }
77*f4c1258dSLouis Dionne #endif
782df59c50SJF Bastien 
792df59c50SJF Bastien   return 0;
805a83710eSEric Fiselier }
81