//===-- Unittests for Limits ----------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// #include "src/__support/CPP/limits.h" #include "src/__support/big_int.h" #include "src/__support/macros/properties/types.h" // LIBC_TYPES_HAS_INT128 #include "test/UnitTest/Test.h" namespace LIBC_NAMESPACE { // This just checks against the C spec, almost all implementations will surpass // this. TEST(LlvmLibcLimitsTest, LimitsFollowSpec) { ASSERT_EQ(cpp::numeric_limits::max(), INT_MAX); ASSERT_EQ(cpp::numeric_limits::min(), INT_MIN); ASSERT_EQ(cpp::numeric_limits::max(), UINT_MAX); ASSERT_EQ(cpp::numeric_limits::max(), LONG_MAX); ASSERT_EQ(cpp::numeric_limits::min(), LONG_MIN); ASSERT_EQ(cpp::numeric_limits::max(), ULONG_MAX); ASSERT_EQ(cpp::numeric_limits::max(), LLONG_MAX); ASSERT_EQ(cpp::numeric_limits::min(), LLONG_MIN); ASSERT_EQ(cpp::numeric_limits::max(), ULLONG_MAX); } TEST(LlvmLibcLimitsTest, UInt128Limits) { auto umax128 = cpp::numeric_limits>::max(); auto umax64 = LIBC_NAMESPACE::UInt<128>(cpp::numeric_limits::max()); EXPECT_GT(umax128, umax64); ASSERT_EQ(~LIBC_NAMESPACE::UInt<128>(0), umax128); #ifdef LIBC_TYPES_HAS_INT128 ASSERT_EQ(~__uint128_t(0), cpp::numeric_limits<__uint128_t>::max()); #endif // LIBC_TYPES_HAS_INT128 } } // namespace LIBC_NAMESPACE