brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.8 KiB · 1d31e55 Raw
110 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 11// <compare>12 13// constexpr bool is_eq  (partial_ordering cmp) noexcept { return cmp == 0; }14// constexpr bool is_neq (partial_ordering cmp) noexcept { return cmp != 0; }15// constexpr bool is_lt  (partial_ordering cmp) noexcept { return cmp < 0; }16// constexpr bool is_lteq(partial_ordering cmp) noexcept { return cmp <= 0; }17// constexpr bool is_gt  (partial_ordering cmp) noexcept { return cmp > 0; }18// constexpr bool is_gteq(partial_ordering cmp) noexcept { return cmp >= 0; }19 20#include <compare>21#include <cassert>22 23#include "test_macros.h"24 25constexpr bool test()26{27    assert(!std::is_eq(std::strong_ordering::less));28    assert( std::is_eq(std::strong_ordering::equal));29    assert(!std::is_eq(std::strong_ordering::greater));30    assert(!std::is_eq(std::weak_ordering::less));31    assert( std::is_eq(std::weak_ordering::equivalent));32    assert(!std::is_eq(std::weak_ordering::greater));33    assert(!std::is_eq(std::partial_ordering::less));34    assert( std::is_eq(std::partial_ordering::equivalent));35    assert(!std::is_eq(std::partial_ordering::greater));36    assert(!std::is_eq(std::partial_ordering::unordered));37 38    assert( std::is_neq(std::strong_ordering::less));39    assert(!std::is_neq(std::strong_ordering::equal));40    assert( std::is_neq(std::strong_ordering::greater));41    assert( std::is_neq(std::weak_ordering::less));42    assert(!std::is_neq(std::weak_ordering::equivalent));43    assert( std::is_neq(std::weak_ordering::greater));44    assert( std::is_neq(std::partial_ordering::less));45    assert(!std::is_neq(std::partial_ordering::equivalent));46    assert( std::is_neq(std::partial_ordering::greater));47    assert( std::is_neq(std::partial_ordering::unordered));48 49    assert( std::is_lt(std::strong_ordering::less));50    assert(!std::is_lt(std::strong_ordering::equal));51    assert(!std::is_lt(std::strong_ordering::greater));52    assert( std::is_lt(std::weak_ordering::less));53    assert(!std::is_lt(std::weak_ordering::equivalent));54    assert(!std::is_lt(std::weak_ordering::greater));55    assert( std::is_lt(std::partial_ordering::less));56    assert(!std::is_lt(std::partial_ordering::equivalent));57    assert(!std::is_lt(std::partial_ordering::greater));58    assert(!std::is_lt(std::partial_ordering::unordered));59 60    assert( std::is_lteq(std::strong_ordering::less));61    assert( std::is_lteq(std::strong_ordering::equal));62    assert(!std::is_lteq(std::strong_ordering::greater));63    assert( std::is_lteq(std::weak_ordering::less));64    assert( std::is_lteq(std::weak_ordering::equivalent));65    assert(!std::is_lteq(std::weak_ordering::greater));66    assert( std::is_lteq(std::partial_ordering::less));67    assert( std::is_lteq(std::partial_ordering::equivalent));68    assert(!std::is_lteq(std::partial_ordering::greater));69    assert(!std::is_lteq(std::partial_ordering::unordered));70 71    assert(!std::is_gt(std::strong_ordering::less));72    assert(!std::is_gt(std::strong_ordering::equal));73    assert( std::is_gt(std::strong_ordering::greater));74    assert(!std::is_gt(std::weak_ordering::less));75    assert(!std::is_gt(std::weak_ordering::equivalent));76    assert( std::is_gt(std::weak_ordering::greater));77    assert(!std::is_gt(std::partial_ordering::less));78    assert(!std::is_gt(std::partial_ordering::equivalent));79    assert( std::is_gt(std::partial_ordering::greater));80    assert(!std::is_gt(std::partial_ordering::unordered));81 82    assert(!std::is_gteq(std::strong_ordering::less));83    assert( std::is_gteq(std::strong_ordering::equal));84    assert( std::is_gteq(std::strong_ordering::greater));85    assert(!std::is_gteq(std::weak_ordering::less));86    assert( std::is_gteq(std::weak_ordering::equivalent));87    assert( std::is_gteq(std::weak_ordering::greater));88    assert(!std::is_gteq(std::partial_ordering::less));89    assert( std::is_gteq(std::partial_ordering::equivalent));90    assert( std::is_gteq(std::partial_ordering::greater));91    assert(!std::is_gteq(std::partial_ordering::unordered));92 93    // Test noexceptness.94    ASSERT_NOEXCEPT(std::is_eq(std::partial_ordering::less));95    ASSERT_NOEXCEPT(std::is_neq(std::partial_ordering::less));96    ASSERT_NOEXCEPT(std::is_lt(std::partial_ordering::less));97    ASSERT_NOEXCEPT(std::is_lteq(std::partial_ordering::less));98    ASSERT_NOEXCEPT(std::is_gt(std::partial_ordering::less));99    ASSERT_NOEXCEPT(std::is_gteq(std::partial_ordering::less));100 101    return true;102}103 104int main(int, char**) {105    test();106    static_assert(test());107 108    return 0;109}110