12a7ed8fcSSiva Chandra Reddy //===-- Unittests for Limits ----------------------------------------------===//
22a7ed8fcSSiva Chandra Reddy //
32a7ed8fcSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42a7ed8fcSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
52a7ed8fcSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
62a7ed8fcSSiva Chandra Reddy //
72a7ed8fcSSiva Chandra Reddy //===----------------------------------------------------------------------===//
82a7ed8fcSSiva Chandra Reddy
92a7ed8fcSSiva Chandra Reddy #include "src/__support/CPP/Limits.h"
10*300f8da8SSiva Chandra Reddy #include "src/__support/CPP/UInt.h"
112a7ed8fcSSiva Chandra Reddy #include "utils/UnitTest/Test.h"
122a7ed8fcSSiva Chandra Reddy
132a7ed8fcSSiva Chandra Reddy // This just checks against the C spec, almost all implementations will surpass
142a7ed8fcSSiva Chandra Reddy // this.
TEST(LlvmLibcLimitsTest,LimitsFollowSpec)152a7ed8fcSSiva Chandra Reddy TEST(LlvmLibcLimitsTest, LimitsFollowSpec) {
162a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<int>::max(), INT_MAX);
172a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<int>::min(), INT_MIN);
182a7ed8fcSSiva Chandra Reddy
192a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<unsigned int>::max(), UINT_MAX);
202a7ed8fcSSiva Chandra Reddy
212a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<long>::max(), LONG_MAX);
222a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<long>::min(), LONG_MIN);
232a7ed8fcSSiva Chandra Reddy
242a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<unsigned long>::max(), ULONG_MAX);
252a7ed8fcSSiva Chandra Reddy
262a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<long long>::max(), LLONG_MAX);
272a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<long long>::min(), LLONG_MIN);
282a7ed8fcSSiva Chandra Reddy
292a7ed8fcSSiva Chandra Reddy ASSERT_EQ(__llvm_libc::cpp::NumericLimits<unsigned long long>::max(),
302a7ed8fcSSiva Chandra Reddy ULLONG_MAX);
312a7ed8fcSSiva Chandra Reddy }
322a7ed8fcSSiva Chandra Reddy
TEST(LlvmLibcLimitsTest,UInt128Limits)33*300f8da8SSiva Chandra Reddy TEST(LlvmLibcLimitsTest, UInt128Limits) {
34*300f8da8SSiva Chandra Reddy auto umax128 =
35*300f8da8SSiva Chandra Reddy __llvm_libc::cpp::NumericLimits<__llvm_libc::cpp::UInt<128>>::max();
36*300f8da8SSiva Chandra Reddy auto umax64 = __llvm_libc::cpp::UInt<128>(
37*300f8da8SSiva Chandra Reddy __llvm_libc::cpp::NumericLimits<uint64_t>::max());
38*300f8da8SSiva Chandra Reddy EXPECT_GT(umax128, umax64);
39*300f8da8SSiva Chandra Reddy ASSERT_EQ(~__llvm_libc::cpp::UInt<128>(0), umax128);
40ce6bfd10SDominic Chen #ifdef __SIZEOF_INT128__
41*300f8da8SSiva Chandra Reddy ASSERT_EQ(~__uint128_t(0),
42*300f8da8SSiva Chandra Reddy __llvm_libc::cpp::NumericLimits<__uint128_t>::max());
43ce6bfd10SDominic Chen #endif
44*300f8da8SSiva Chandra Reddy }
45