82 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++98, c++03, c++11, c++14, c++1710 11// <chrono>12// class year_month_day_last;13 14// constexpr bool operator==(const year_month_day_last& x, const year_month_day_last& y) noexcept;15// constexpr bool operator<=>(const year_month_day_last& x, const year_month_day_last& y) noexcept;16 17#include <chrono>18#include <type_traits>19#include <cassert>20 21#include "test_macros.h"22#include "test_comparisons.h"23 24constexpr bool test() {25 using year = std::chrono::year;26 using month = std::chrono::month;27 using month_day_last = std::chrono::month_day_last;28 using year_month_day_last = std::chrono::year_month_day_last;29 30 constexpr month January = std::chrono::January;31 constexpr month February = std::chrono::February;32 33 assert(testOrder(year_month_day_last{year{1234}, month_day_last{January}},34 year_month_day_last{year{1234}, month_day_last{January}},35 std::strong_ordering::equal));36 37 // different month38 assert(testOrder(year_month_day_last{year{1234}, month_day_last{January}},39 year_month_day_last{year{1234}, month_day_last{February}},40 std::strong_ordering::less));41 42 // different year43 assert(testOrder(year_month_day_last{year{1234}, month_day_last{January}},44 year_month_day_last{year{1235}, month_day_last{January}},45 std::strong_ordering::less));46 47 // different year and month48 assert(testOrder(year_month_day_last{year{1234}, month_day_last{February}},49 year_month_day_last{year{1235}, month_day_last{January}},50 std::strong_ordering::less));51 52 // same year, different months53 for (unsigned i = 1; i < 12; ++i)54 for (unsigned j = 1; j < 12; ++j)55 assert((testOrder(year_month_day_last{year{1234}, month_day_last{month{i}}},56 year_month_day_last{year{1234}, month_day_last{month{j}}},57 i == j ? std::strong_ordering::equal58 : i < j ? std::strong_ordering::less59 : std::strong_ordering::greater)));60 61 // same month, different years62 for (int i = 1000; i < 1010; ++i)63 for (int j = 1000; j < 1010; ++j)64 assert((testOrder(year_month_day_last{year{i}, month_day_last{January}},65 year_month_day_last{year{j}, month_day_last{January}},66 i == j ? std::strong_ordering::equal67 : i < j ? std::strong_ordering::less68 : std::strong_ordering::greater)));69 return true;70}71 72int main(int, char**) {73 using year_month_day_last = std::chrono::year_month_day_last;74 AssertOrderAreNoexcept<year_month_day_last>();75 AssertOrderReturn<std::strong_ordering, year_month_day_last>();76 77 test();78 static_assert(test());79 80 return 0;81}82