ctor.sys_days.pass.cpp (2681B)
1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // UNSUPPORTED: c++98, c++03, c++11, c++14, c++17 10 11 // <chrono> 12 // class year_month_day; 13 14 // constexpr year_month_day(const sys_days& dp) noexcept; 15 // 16 // Effects: Constructs an object of type year_month_day that corresponds 17 // to the date represented by dp. 18 // 19 // Remarks: For any value ymd of type year_month_day for which ymd.ok() is true, 20 // ymd == year_month_day{sys_days{ymd}} is true. 21 // 22 // constexpr chrono::year year() const noexcept; 23 // constexpr chrono::month month() const noexcept; 24 // constexpr bool ok() const noexcept; 25 26 #include <chrono> 27 #include <type_traits> 28 #include <cassert> 29 30 #include "test_macros.h" 31 32 int main() 33 { 34 using year = std::chrono::year; 35 using day = std::chrono::day; 36 using sys_days = std::chrono::sys_days; 37 using days = std::chrono::days; 38 using year_month_day = std::chrono::year_month_day; 39 40 ASSERT_NOEXCEPT(year_month_day{std::declval<sys_days>()}); 41 42 { 43 constexpr sys_days sd{}; 44 constexpr year_month_day ymd{sd}; 45 46 static_assert( ymd.ok(), ""); 47 static_assert( ymd.year() == year{1970}, ""); 48 static_assert( ymd.month() == std::chrono::January, ""); 49 static_assert( ymd.day() == day{1}, ""); 50 } 51 52 { 53 constexpr sys_days sd{days{10957+32}}; 54 constexpr year_month_day ymd{sd}; 55 56 static_assert( ymd.ok(), ""); 57 static_assert( ymd.year() == year{2000}, ""); 58 static_assert( ymd.month() == std::chrono::February, ""); 59 static_assert( ymd.day() == day{2}, ""); 60 } 61 62 63 // There's one more leap day between 1/1/40 and 1/1/70 64 // when compared to 1/1/70 -> 1/1/2000 65 { 66 constexpr sys_days sd{days{-10957}}; 67 constexpr year_month_day ymd{sd}; 68 69 static_assert( ymd.ok(), ""); 70 static_assert( ymd.year() == year{1940}, ""); 71 static_assert( ymd.month() == std::chrono::January, ""); 72 static_assert( ymd.day() == day{2}, ""); 73 } 74 75 { 76 sys_days sd{days{-(10957+34)}}; 77 year_month_day ymd{sd}; 78 79 assert( ymd.ok()); 80 assert( ymd.year() == year{1939}); 81 assert( ymd.month() == std::chrono::November); 82 assert( ymd.day() == day{29}); 83 } 84 }