brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 1fc7959 Raw
70 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 month_day;12 13// constexpr bool operator==(const month_day& x, const month_day& y) noexcept;14// constexpr strong_comparison operator<=>(const month_day& x, const month_day& y) noexcept;15 16#include <chrono>17#include <type_traits>18#include <cassert>19 20#include "test_macros.h"21#include "test_comparisons.h"22 23constexpr bool test() {24  using day       = std::chrono::day;25  using month     = std::chrono::month;26  using month_day = std::chrono::month_day;27 28  assert(testOrder(29      month_day{std::chrono::January, day{1}}, month_day{std::chrono::January, day{1}}, std::strong_ordering::equal));30 31  assert(testOrder(32      month_day{std::chrono::January, day{1}}, month_day{std::chrono::January, day{2}}, std::strong_ordering::less));33 34  assert(testOrder(35      month_day{std::chrono::January, day{1}}, month_day{std::chrono::February, day{1}}, std::strong_ordering::less));36 37  //  same day, different months38  for (unsigned i = 1; i < 12; ++i)39    for (unsigned j = 1; j < 12; ++j)40      assert((testOrder(41          month_day{month{i}, day{1}},42          month_day{month{j}, day{1}},43          i == j  ? std::strong_ordering::equal44          : i < j ? std::strong_ordering::less45                  : std::strong_ordering::greater)));46 47  //  same month, different days48  for (unsigned i = 1; i < 31; ++i)49    for (unsigned j = 1; j < 31; ++j)50      assert((testOrder(51          month_day{month{2}, day{i}},52          month_day{month{2}, day{j}},53          i == j  ? std::strong_ordering::equal54          : i < j ? std::strong_ordering::less55                  : std::strong_ordering::greater)));56 57  return true;58}59 60int main(int, char**) {61  using month_day = std::chrono::month_day;62  AssertOrderAreNoexcept<month_day>();63  AssertOrderReturn<std::strong_ordering, month_day>();64 65  test();66  static_assert(test());67 68  return 0;69}70