97 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// UNSUPPORTED: c++03, c++11, c++14, c++179 10// <chrono>11// class year_month_weekday;12 13// constexpr year_month_weekday(const sys_days& dp) noexcept;14//15// Effects: Constructs an object of type year_month_weekday that corresponds16// to the date represented by dp17//18// Remarks: For any value ymd of type year_month_weekday for which ymd.ok() is true,19// ymd == year_month_weekday{sys_days{ymd}} is true.20//21// constexpr chrono::year year() const noexcept;22// constexpr chrono::month month() const noexcept;23// constexpr bool ok() const noexcept;24 25#include <chrono>26#include <cassert>27#include <type_traits>28#include <utility>29 30#include "test_macros.h"31 32int main(int, char**)33{34 using year = std::chrono::year;35 using days = std::chrono::days;36 using sys_days = std::chrono::sys_days;37 using weekday_indexed = std::chrono::weekday_indexed;38 using year_month_weekday = std::chrono::year_month_weekday;39 40 ASSERT_NOEXCEPT(year_month_weekday{std::declval<const sys_days>()});41 42 {43 constexpr sys_days sd{}; // 1-Jan-1970 was a Thursday44 constexpr year_month_weekday ymwd{sd};45 46 static_assert( ymwd.ok(), "");47 static_assert( ymwd.year() == year{1970}, "");48 static_assert( ymwd.month() == std::chrono::January, "");49 static_assert( ymwd.weekday() == std::chrono::Thursday, "");50 static_assert( ymwd.index() == 1, "");51 static_assert( ymwd.weekday_indexed() == weekday_indexed{std::chrono::Thursday, 1}, "");52 static_assert( ymwd == year_month_weekday{sys_days{ymwd}}, ""); // round trip53 }54 55 {56 constexpr sys_days sd{days{10957+32}}; // 2-Feb-2000 was a Wednesday57 constexpr year_month_weekday ymwd{sd};58 59 static_assert( ymwd.ok(), "");60 static_assert( ymwd.year() == year{2000}, "");61 static_assert( ymwd.month() == std::chrono::February, "");62 static_assert( ymwd.weekday() == std::chrono::Wednesday, "");63 static_assert( ymwd.index() == 1, "");64 static_assert( ymwd.weekday_indexed() == weekday_indexed{std::chrono::Wednesday, 1}, "");65 static_assert( ymwd == year_month_weekday{sys_days{ymwd}}, ""); // round trip66 }67 68 69 {70 constexpr sys_days sd{days{-10957}}; // 2-Jan-1940 was a Tuesday71 constexpr year_month_weekday ymwd{sd};72 73 static_assert( ymwd.ok(), "");74 static_assert( ymwd.year() == year{1940}, "");75 static_assert( ymwd.month() == std::chrono::January, "");76 static_assert( ymwd.weekday() == std::chrono::Tuesday, "");77 static_assert( ymwd.index() == 1, "");78 static_assert( ymwd.weekday_indexed() == weekday_indexed{std::chrono::Tuesday, 1}, "");79 static_assert( ymwd == year_month_weekday{sys_days{ymwd}}, ""); // round trip80 }81 82 {83 sys_days sd{days{-(10957+34)}}; // 29-Nov-1939 was a Wednesday84 year_month_weekday ymwd{sd};85 86 assert( ymwd.ok());87 assert( ymwd.year() == year{1939});88 assert( ymwd.month() == std::chrono::November);89 assert( ymwd.weekday() == std::chrono::Wednesday);90 assert( ymwd.index() == 5);91 assert((ymwd.weekday_indexed() == weekday_indexed{std::chrono::Wednesday, 5}));92 assert( ymwd == year_month_weekday{sys_days{ymwd}}); // round trip93 }94 95 return 0;96}97