1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// UNSUPPORTED: c++03, c++11, c++14, c++17
10// UNSUPPORTED: no-filesystem, no-localization, no-tzdb
11
12// XFAIL: libcpp-has-no-experimental-tzdb
13// XFAIL: availability-tzdb-missing
14
15// <chrono>
16
17// template<class Duration, class TimeZonePtr = const time_zone*>
18// class zoned_time;
19//
20// sys_time<duration> get_sys_time() const;
21
22#include <chrono>
23#include <cassert>
24#include <concepts>
25
26#include "../test_offset_time_zone.h"
27
28static void test_const_member() {
29 {
30 using duration = std::chrono::nanoseconds;
31 using time_point = std::chrono::sys_time<duration>;
32 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
33
34 std::same_as<time_point> decltype(auto) time = zt.get_sys_time();
35 assert(time == time_point{duration{42}});
36 }
37 {
38 using duration = std::chrono::nanoseconds;
39 using time_point = std::chrono::sys_time<duration>;
40 const std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
41
42 std::same_as<time_point> decltype(auto) time = zt.get_sys_time();
43 assert(time == time_point{duration{42}});
44 }
45}
46
47static void test_duration_conversion() {
48 // common_type_t<duration, seconds> -> duration
49 {
50 using duration = std::chrono::nanoseconds;
51 using time_point = std::chrono::sys_time<duration>;
52 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
53
54 std::same_as<time_point> decltype(auto) time = zt.get_sys_time();
55 assert(time == time_point{duration{42}});
56 }
57 {
58 using duration = std::chrono::microseconds;
59 using time_point = std::chrono::sys_time<duration>;
60 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
61
62 std::same_as<time_point> decltype(auto) time = zt.get_sys_time();
63 assert(time == time_point{duration{42}});
64 }
65 {
66 using duration = std::chrono::milliseconds;
67 using time_point = std::chrono::sys_time<duration>;
68 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
69
70 std::same_as<time_point> decltype(auto) time = zt.get_sys_time();
71 assert(time == time_point{duration{42}});
72 }
73 // common_type_t<seconds, seconds> -> seconds
74 {
75 using duration = std::chrono::seconds;
76 using time_point = std::chrono::sys_time<duration>;
77 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
78
79 std::same_as<time_point> decltype(auto) time = zt.get_sys_time();
80 assert(time == time_point{duration{42}});
81 }
82 // common_type_t<duration, seconds> -> seconds
83 {
84 using duration = std::chrono::days;
85 using time_point = std::chrono::sys_time<duration>;
86 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
87
88 std::same_as<std::chrono::sys_seconds> decltype(auto) time = zt.get_sys_time();
89 assert(time == time_point{duration{42}});
90 }
91 {
92 using duration = std::chrono::weeks;
93 using time_point = std::chrono::sys_time<duration>;
94 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
95
96 std::same_as<std::chrono::sys_seconds> decltype(auto) time = zt.get_sys_time();
97 assert(time == time_point{duration{42}});
98 }
99 {
100 using duration = std::chrono::months;
101 using time_point = std::chrono::sys_time<duration>;
102 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
103
104 std::same_as<std::chrono::sys_seconds> decltype(auto) time = zt.get_sys_time();
105 assert(time == time_point{duration{42}});
106 }
107 {
108 using duration = std::chrono::years;
109 using time_point = std::chrono::sys_time<duration>;
110 std::chrono::zoned_time<duration> zt{time_point{duration{42}}};
111
112 std::same_as<std::chrono::sys_seconds> decltype(auto) time = zt.get_sys_time();
113 assert(time == time_point{duration{42}});
114 }
115}
116
117int main(int, char**) {
118 test_const_member();
119 test_duration_conversion();
120
121 return 0;
122}
123

source code of libcxx/test/std/time/time.zone/time.zone.zonedtime/time.zone.zonedtime.members/get_sys_time.pass.cpp