brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · c419459 Raw
145 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// zoned_time& operator=(const sys_time<Duration>& st);21 22#include <cassert>23#include <chrono>24#include <concepts>25#include <type_traits>26 27namespace cr = std::chrono;28 29int main(int, char**) {30  {31    using duration   = cr::nanoseconds;32    using time_point = cr::sys_time<duration>;33    using zoned_time = cr::zoned_time<duration>;34    zoned_time zt{time_point{duration{42}}};35 36    assert(zt.get_time_zone() == cr::locate_zone("UTC"));37    assert(zt.get_sys_time() == time_point{duration{42}});38 39    std::same_as<zoned_time&> decltype(auto) result = zt = time_point{duration{99}};40    assert(&result == &zt);41    assert(zt.get_time_zone() == cr::locate_zone("UTC"));42    assert(zt.get_sys_time() == time_point{duration{99}});43  }44  {45    using duration   = cr::microseconds;46    using time_point = cr::sys_time<duration>;47    using zoned_time = cr::zoned_time<duration>;48    zoned_time zt{time_point{duration{42}}};49 50    assert(zt.get_time_zone() == cr::locate_zone("UTC"));51    assert(zt.get_sys_time() == time_point{duration{42}});52 53    std::same_as<zoned_time&> decltype(auto) result = zt = time_point{duration{99}};54    assert(&result == &zt);55    assert(zt.get_time_zone() == cr::locate_zone("UTC"));56    assert(zt.get_sys_time() == time_point{duration{99}});57  }58  {59    using duration   = cr::milliseconds;60    using time_point = cr::sys_time<duration>;61    using zoned_time = cr::zoned_time<duration>;62    zoned_time zt{time_point{duration{42}}};63 64    assert(zt.get_time_zone() == cr::locate_zone("UTC"));65    assert(zt.get_sys_time() == time_point{duration{42}});66 67    std::same_as<zoned_time&> decltype(auto) result = zt = time_point{duration{99}};68    assert(&result == &zt);69    assert(zt.get_time_zone() == cr::locate_zone("UTC"));70    assert(zt.get_sys_time() == time_point{duration{99}});71  }72  {73    using duration   = cr::seconds;74    using time_point = cr::sys_time<duration>;75    using zoned_time = cr::zoned_time<duration>;76    zoned_time zt{time_point{duration{42}}};77 78    assert(zt.get_time_zone() == cr::locate_zone("UTC"));79    assert(zt.get_sys_time() == time_point{duration{42}});80 81    std::same_as<zoned_time&> decltype(auto) result = zt = time_point{duration{99}};82    assert(&result == &zt);83    assert(zt.get_time_zone() == cr::locate_zone("UTC"));84    assert(zt.get_sys_time() == time_point{duration{99}});85  }86  {87    using duration   = cr::days;88    using time_point = cr::sys_time<duration>;89    using zoned_time = cr::zoned_time<duration>;90    zoned_time zt{time_point{duration{42}}};91 92    assert(zt.get_time_zone() == cr::locate_zone("UTC"));93    assert(zt.get_sys_time() == time_point{duration{42}});94 95    std::same_as<zoned_time&> decltype(auto) result = zt = time_point{duration{99}};96    assert(&result == &zt);97    assert(zt.get_time_zone() == cr::locate_zone("UTC"));98    assert(zt.get_sys_time() == time_point{duration{99}});99  }100  {101    using duration   = cr::weeks;102    using time_point = cr::sys_time<duration>;103    using zoned_time = cr::zoned_time<duration>;104    zoned_time zt{time_point{duration{42}}};105 106    assert(zt.get_time_zone() == cr::locate_zone("UTC"));107    assert(zt.get_sys_time() == time_point{duration{42}});108 109    std::same_as<zoned_time&> decltype(auto) result = zt = time_point{duration{99}};110    assert(&result == &zt);111    assert(zt.get_time_zone() == cr::locate_zone("UTC"));112    assert(zt.get_sys_time() == time_point{duration{99}});113  }114  {115    using duration   = cr::months;116    using time_point = cr::sys_time<duration>;117    using zoned_time = cr::zoned_time<duration>;118    zoned_time zt{time_point{duration{42}}};119 120    assert(zt.get_time_zone() == cr::locate_zone("UTC"));121    assert(zt.get_sys_time() == time_point{duration{42}});122 123    std::same_as<zoned_time&> decltype(auto) result = zt = time_point{duration{99}};124    assert(&result == &zt);125    assert(zt.get_time_zone() == cr::locate_zone("UTC"));126    assert(zt.get_sys_time() == time_point{duration{99}});127  }128  {129    using duration   = cr::years;130    using time_point = cr::sys_time<duration>;131    using zoned_time = cr::zoned_time<duration>;132    zoned_time zt{time_point{duration{42}}};133 134    assert(zt.get_time_zone() == cr::locate_zone("UTC"));135    assert(zt.get_sys_time() == time_point{duration{42}});136 137    std::same_as<zoned_time&> decltype(auto) result = zt = time_point{duration{99}};138    assert(&result == &zt);139    assert(zt.get_time_zone() == cr::locate_zone("UTC"));140    assert(zt.get_sys_time() == time_point{duration{99}});141  }142 143  return 0;144}145