get_time_wide.pass.cpp revision 83e2c4d877fe2d7793868b1c6a5d9525a7c4d431
1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project//===----------------------------------------------------------------------===//
2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project//
3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project//                     The LLVM Compiler Infrastructure
4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project//
5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project// This file is dual licensed under the MIT and the University of Illinois Open
6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project// Source Licenses. See LICENSE.TXT for details.
7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project//
8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project//===----------------------------------------------------------------------===//
9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project// <locale>
11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project// class time_get_byname<charT, InputIterator>
13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project// iter_type
15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project// get_time(iter_type s, iter_type end, ios_base& str,
16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project//          ios_base::iostate& err, tm* t) const;
17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include <locale>
19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include <cassert>
20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "test_iterators.h"
21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "platform_support.h" // locale name macros
23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projecttypedef input_iterator<const wchar_t*> I;
25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projecttypedef std::time_get_byname<wchar_t, I> F;
27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
28069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectclass my_facet
29069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    : public F
30069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project{
31069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic:
32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    explicit my_facet(const std::string& nm, std::size_t refs = 0)
33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        : F(nm, refs) {}
34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project};
35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectint main()
37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project{
38d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath    std::ios ios(0);
39d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath    std::ios_base::iostate err;
40d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath    std::tm t;
41d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath    {
42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        const my_facet f(LOCALE_en_US_UTF_8, 1);
43d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath        const wchar_t in[] = L"13:14:15";
44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        err = std::ios_base::goodbit;
45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        t = std::tm();
46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(t.tm_hour == 13);
49069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(t.tm_min == 14);
50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(t.tm_sec == 15);
51069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(err == std::ios_base::eofbit);
52069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
53069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    {
54069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        const my_facet f(LOCALE_fr_FR_UTF_8, 1);
55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        const wchar_t in[] = L"13:14:15";
56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        err = std::ios_base::goodbit;
57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        t = std::tm();
58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(t.tm_hour == 13);
61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(t.tm_min == 14);
62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(t.tm_sec == 15);
63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        assert(err == std::ios_base::eofbit);
64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    {
66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        const my_facet f(LOCALE_ru_RU_UTF_8, 1);
67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        const wchar_t in[] = L"13:14:15";
68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        err = std::ios_base::goodbit;
69        t = std::tm();
70        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
71        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
72        assert(t.tm_hour == 13);
73        assert(t.tm_min == 14);
74        assert(t.tm_sec == 15);
75        assert(err == std::ios_base::eofbit);
76    }
77    {
78        const my_facet f(LOCALE_zh_CN_UTF_8, 1);
79        const wchar_t in[] = L"13:14:15";
80        err = std::ios_base::goodbit;
81        t = std::tm();
82        I i = f.get_time(I(in), I(in+sizeof(in)/sizeof(in[0])-1), ios, err, &t);
83        assert(i.base() == in+sizeof(in)/sizeof(in[0])-1);
84        assert(t.tm_hour == 13);
85        assert(t.tm_min == 14);
86        assert(t.tm_sec == 15);
87        assert(err == std::ios_base::eofbit);
88    }
89}
90