brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.7 KiB · 3595d0a Raw
249 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// zoned_time() -> zoned_time<seconds>;18//19// template<class Duration>20//   zoned_time(sys_time<Duration>)21//     -> zoned_time<common_type_t<Duration, seconds>>;22//23// template<class TimeZonePtrOrName>24//   using time-zone-representation =        // exposition only25//     conditional_t<is_convertible_v<TimeZonePtrOrName, string_view>,26//                   const time_zone*,27//                   remove_cvref_t<TimeZonePtrOrName>>;28//29// template<class TimeZonePtrOrName>30//   zoned_time(TimeZonePtrOrName&&)31//     -> zoned_time<seconds, time-zone-representation<TimeZonePtrOrName>>;32//33// template<class TimeZonePtrOrName, class Duration>34//   zoned_time(TimeZonePtrOrName&&, sys_time<Duration>)35//     -> zoned_time<common_type_t<Duration, seconds>,36//                   time-zone-representation<TimeZonePtrOrName>>;37//38// template<class TimeZonePtrOrName, class Duration>39//   zoned_time(TimeZonePtrOrName&&, local_time<Duration>,40//              choose = choose::earliest)41//     -> zoned_time<common_type_t<Duration, seconds>,42//                   time-zone-representation<TimeZonePtrOrName>>;43//44// template<class Duration, class TimeZonePtrOrName, class TimeZonePtr2>45//   zoned_time(TimeZonePtrOrName&&, zoned_time<Duration, TimeZonePtr2>,46//              choose = choose::earliest)47//     -> zoned_time<common_type_t<Duration, seconds>,48//                   time-zone-representation<TimeZonePtrOrName>>;49 50#include <chrono>51#include <concepts>52#include <string>53 54#include "test_offset_time_zone.h"55 56namespace cr = std::chrono;57 58// Verify the results of the constructed object.59int main(int, char**) {60  {61    // zoned_time() -> zoned_time<seconds>;62    cr::zoned_time zt;63    static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);64  }65 66  {67    // template<class Duration>68    //   zoned_time(sys_time<Duration>)69    //     -> zoned_time<common_type_t<Duration, seconds>>;70    {71      cr::zoned_time zt{cr::sys_time<cr::nanoseconds>{cr::nanoseconds{0}}};72      static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::nanoseconds, const cr::time_zone*>>);73    }74    {75      cr::zoned_time zt{cr::sys_time<cr::seconds>{cr::seconds{0}}};76      static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);77    }78    {79      cr::zoned_time zt{cr::sys_time<cr::days>{cr::days{0}}};80      static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);81    }82  }83 84  {85    // template<class TimeZonePtrOrName>86    //   zoned_time(TimeZonePtrOrName&&)87    //     -> zoned_time<seconds, time-zone-representation<TimeZonePtrOrName>>;88    { // Name89      {90        cr::zoned_time zt{"UTC"};91        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);92      }93      {94        cr::zoned_time zt{std::string{"UTC"}};95        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);96      }97      {98        cr::zoned_time zt{std::string_view{"UTC"}};99        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);100      }101    }102    { // TimeZonePtr103      {104        cr::zoned_time zt{static_cast<const cr::time_zone*>(nullptr)};105        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);106      }107      {108        cr::zoned_time zt{offset_time_zone<offset_time_zone_flags::none>{}};109        static_assert(110            std::same_as< decltype(zt), cr::zoned_time<cr::seconds, offset_time_zone<offset_time_zone_flags::none>>>);111      }112      {113        cr::zoned_time zt{offset_time_zone<offset_time_zone_flags::has_default_zone>{}};114        static_assert(115            std::same_as<decltype(zt),116                         cr::zoned_time<cr::seconds, offset_time_zone<offset_time_zone_flags::has_default_zone>>>);117      }118      {119        cr::zoned_time zt{offset_time_zone<offset_time_zone_flags::has_locate_zone>{}};120        static_assert(121            std::same_as<decltype(zt),122                         cr::zoned_time<cr::seconds, offset_time_zone<offset_time_zone_flags::has_locate_zone>>>);123      }124      {125        cr::zoned_time zt{offset_time_zone<offset_time_zone_flags::both>{}};126        static_assert(127            std::same_as< decltype(zt), cr::zoned_time<cr::seconds, offset_time_zone<offset_time_zone_flags::both>>>);128      }129 130      // There are no requirements on the TimeZonePtr type.131      {132        cr::zoned_time zt{0};133        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, int>>);134      }135      {136        cr::zoned_time zt{0.0};137        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, double>>);138      }139      {140        cr::zoned_time zt{cr::seconds{}};141        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, cr::seconds>>);142      }143    }144  }145 146  {147    // template<class TimeZonePtrOrName, class Duration>148    //   zoned_time(TimeZonePtrOrName&&, sys_time<Duration>)149    //     -> zoned_time<common_type_t<Duration, seconds>,150    //                   time-zone-representation<TimeZonePtrOrName>>;151    { // Name152      {153        cr::zoned_time zt{"UTC", cr::sys_time<cr::nanoseconds>{}};154        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::nanoseconds, const cr::time_zone*>>);155      }156      {157        cr::zoned_time zt{"UTC", cr::sys_time<cr::days>{}};158        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);159      }160    }161 162    { // TimeZonePtr163      {164        cr::zoned_time zt{static_cast<const cr::time_zone*>(nullptr), cr::sys_time<cr::nanoseconds>{}};165        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::nanoseconds, const cr::time_zone*>>);166      }167      {168        cr::zoned_time zt{static_cast<const cr::time_zone*>(nullptr), cr::sys_time<cr::days>{}};169        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);170      }171      {172        cr::zoned_time zt{offset_time_zone<offset_time_zone_flags::none>{}, cr::sys_time<cr::nanoseconds>{}};173        static_assert(std::same_as< decltype(zt),174                                    cr::zoned_time<cr::nanoseconds, offset_time_zone<offset_time_zone_flags::none>>>);175      }176      {177        cr::zoned_time zt{offset_time_zone<offset_time_zone_flags::none>{}, cr::sys_time<cr::days>{}};178        static_assert(179            std::same_as< decltype(zt), cr::zoned_time<cr::seconds, offset_time_zone<offset_time_zone_flags::none>>>);180      }181    }182  }183 184  {185    // template<class TimeZonePtrOrName, class Duration>186    //   zoned_time(TimeZonePtrOrName&&, local_time<Duration>,187    //              choose = choose::earliest)188    //     -> zoned_time<common_type_t<Duration, seconds>,189    //                   time-zone-representation<TimeZonePtrOrName>>;190    { // Name191      {192        cr::zoned_time zt{"UTC", cr::local_time<cr::nanoseconds>{}};193        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::nanoseconds, const cr::time_zone*>>);194      }195      {196        cr::zoned_time zt{"UTC", cr::local_time<cr::days>{}, cr::choose::earliest};197        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);198      }199    }200    { // TimeZonePtr201      {202        cr::zoned_time zt{cr::locate_zone("UTC"), cr::local_time<cr::nanoseconds>{}};203        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::nanoseconds, const cr::time_zone*>>);204      }205      {206        cr::zoned_time zt{cr::locate_zone("UTC"), cr::local_time<cr::days>{}, cr::choose::earliest};207        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);208      }209    }210  }211 212  {213    // template<class Duration, class TimeZonePtrOrName, class TimeZonePtr2>214    //   zoned_time(TimeZonePtrOrName&&, zoned_time<Duration, TimeZonePtr2>,215    //              choose = choose::earliest)216    //     -> zoned_time<common_type_t<Duration, seconds>,217    //                   time-zone-representation<TimeZonePtrOrName>>;218    { // Name219      {220        cr::zoned_time zt{221            "UTC", cr::zoned_time<cr::nanoseconds, offset_time_zone<offset_time_zone_flags::has_default_zone>>{}};222        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::nanoseconds, const cr::time_zone*>>);223      }224      {225        cr::zoned_time zt{"UTC",226                          cr::zoned_time<cr::days, offset_time_zone<offset_time_zone_flags::has_default_zone>>{},227                          cr::choose::earliest};228        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);229      }230    }231    { // TimeZonePtr232      {233        cr::zoned_time zt{234            cr::locate_zone("UTC"),235            cr::zoned_time<cr::nanoseconds, offset_time_zone<offset_time_zone_flags::has_default_zone>>{}};236        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::nanoseconds, const cr::time_zone*>>);237      }238      {239        cr::zoned_time zt{cr::locate_zone("UTC"),240                          cr::zoned_time<cr::days, offset_time_zone<offset_time_zone_flags::has_default_zone>>{},241                          cr::choose::earliest};242        static_assert(std::same_as<decltype(zt), cr::zoned_time<cr::seconds, const cr::time_zone*>>);243      }244    }245  }246 247  return 0;248}249