//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 // // constexpr bool cmp_greater(T t, U u) noexcept; // C++20 #include #include #include #include #include #include "test_macros.h" template struct Tuple { T min; T max; T mid; constexpr Tuple() { min = std::numeric_limits::min(); max = std::numeric_limits::max(); mid = std::midpoint(min, max); } }; template constexpr void test_cmp_greater1() { constexpr Tuple tup; assert(!std::cmp_greater(T(0), T(1))); assert(!std::cmp_greater(T(1), T(2))); assert(!std::cmp_greater(tup.min, tup.max)); assert(!std::cmp_greater(tup.min, tup.mid)); assert(!std::cmp_greater(tup.mid, tup.max)); assert(std::cmp_greater(T(1), T(0))); assert(std::cmp_greater(T(10), T(5))); assert(std::cmp_greater(tup.max, tup.min)); assert(std::cmp_greater(tup.mid, tup.min)); assert(!std::cmp_greater(tup.mid, tup.mid)); assert(!std::cmp_greater(tup.min, tup.min)); assert(!std::cmp_greater(tup.max, tup.max)); assert(std::cmp_greater(tup.max, 1)); assert(std::cmp_greater(1, tup.min)); assert(!std::cmp_greater(T(-1), T(-1))); assert(std::cmp_greater(-2, tup.min) == std::is_signed_v); assert(!std::cmp_greater(tup.min, -2) == std::is_signed_v); assert(!std::cmp_greater(-2, tup.max)); assert(std::cmp_greater(tup.max, -2)); } template constexpr void test_cmp_greater2() { assert(!std::cmp_greater(T(0), U(1))); assert(std::cmp_greater(T(1), U(0))); } template constexpr void test1(const std::tuple&) { (test_cmp_greater1() , ...); } template constexpr void test2_impl(const std::tuple&) { (test_cmp_greater2() , ...); } template constexpr void test2(const std::tuple&, const UTuple& utuple) { (test2_impl(utuple) , ...); } constexpr bool test() { std::tuple< #ifndef TEST_HAS_NO_INT128 __int128_t, __uint128_t, #endif unsigned long long, long long, unsigned long, long, unsigned int, int, unsigned short, short, unsigned char, signed char> types; test1(types); test2(types, types); return true; } int main(int, char**) { ASSERT_NOEXCEPT(std::cmp_greater(1, 0)); test(); static_assert(test()); return 0; }