brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · dde3cff Raw
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