123 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++14, c++1710// UNSUPPORTED: no-filesystem, no-localization, no-tzdb11 12// XFAIL: libcpp-has-no-experimental-tzdb13// XFAIL: availability-tzdb-missing14 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> -> duration49 {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> -> seconds74 {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> -> seconds83 {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