brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 017d073 Raw
135 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// local_time<duration> get_local_time() const;21 22#include <chrono>23#include <cassert>24#include <concepts>25 26#include "../test_offset_time_zone.h"27 28namespace cr = std::chrono;29 30static void test_callable_with_non_const_and_const_objects() {31  {32    using duration         = cr::nanoseconds;33    using time_point       = cr::sys_time<duration>;34    using local_time_point = cr::local_time<duration>;35    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};36 37    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();38    assert(time == local_time_point{duration{42} - cr::hours{1}});39  }40  {41    using duration         = cr::nanoseconds;42    using time_point       = cr::sys_time<duration>;43    using local_time_point = cr::local_time<duration>;44    const cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};45 46    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();47    assert(time == local_time_point{duration{42} - cr::hours{1}});48  }49}50 51static void test_duration_conversion() {52  // common_type_t<duration, seconds> -> duration53  {54    using duration         = cr::nanoseconds;55    using time_point       = cr::sys_time<duration>;56    using local_time_point = cr::local_time<duration>;57    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};58 59    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();60    assert(time == local_time_point{duration{42} - cr::hours{1}});61  }62  {63    using duration         = cr::microseconds;64    using time_point       = cr::sys_time<duration>;65    using local_time_point = cr::local_time<duration>;66    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};67 68    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();69    assert(time == local_time_point{duration{42} - cr::hours{1}});70  }71  {72    using duration         = cr::milliseconds;73    using time_point       = cr::sys_time<duration>;74    using local_time_point = cr::local_time<duration>;75    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};76 77    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();78    assert(time == local_time_point{duration{42} - cr::hours{1}});79  }80  // common_type_t<seconds, seconds> -> seconds81  {82    using duration         = cr::seconds;83    using time_point       = cr::sys_time<duration>;84    using local_time_point = cr::local_time<duration>;85    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};86 87    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();88    assert(time == local_time_point{duration{42} - cr::hours{1}});89  }90  // common_type_t<duration, seconds> -> seconds91  {92    using duration         = cr::days;93    using time_point       = cr::sys_time<duration>;94    using local_time_point = cr::local_time<cr::seconds>;95    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};96 97    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();98    assert(time == local_time_point{duration{42} - cr::hours{1}});99  }100  {101    using duration         = cr::weeks;102    using time_point       = cr::sys_time<duration>;103    using local_time_point = cr::local_time<cr::seconds>;104    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};105 106    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();107    assert(time == local_time_point{duration{42} - cr::hours{1}});108  }109  {110    using duration         = cr::months;111    using time_point       = cr::sys_time<duration>;112    using local_time_point = cr::local_time<cr::seconds>;113    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};114 115    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();116    assert(time == local_time_point{duration{42} - cr::hours{1}});117  }118  {119    using duration         = cr::years;120    using time_point       = cr::sys_time<duration>;121    using local_time_point = cr::local_time<cr::seconds>;122    cr::zoned_time<duration> zt{"Etc/GMT+1", time_point{duration{42}}};123 124    std::same_as<local_time_point> decltype(auto) time = zt.get_local_time();125    assert(time == local_time_point{duration{42} - cr::hours{1}});126  }127}128 129int main(int, char**) {130  test_callable_with_non_const_and_const_objects();131  test_duration_conversion();132 133  return 0;134}135