390 changes: 177 additions & 213 deletions libc/test/src/__support/FPUtil/fpbits_test.cpp

Large diffs are not rendered by default.

134 changes: 134 additions & 0 deletions libc/test/src/__support/integer_literals_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@

//===-- Unittests for user defined integer literals -----------------------===//
//
// 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/integer_literals.h"
#include "test/UnitTest/Test.h"

using LIBC_NAMESPACE::operator""_u8;
using LIBC_NAMESPACE::operator""_u16;
using LIBC_NAMESPACE::operator""_u32;
using LIBC_NAMESPACE::operator""_u64;
using LIBC_NAMESPACE::operator""_u128;
using LIBC_NAMESPACE::operator""_u256;

TEST(LlvmLibcIntegerLiteralTest, u8) {
EXPECT_EQ(uint8_t(0), 0_u8);
EXPECT_EQ(uint8_t(UINT8_MAX), 255_u8);
EXPECT_EQ(uint8_t(UINT8_MAX), 0xFF_u8);
EXPECT_EQ(uint8_t(UINT8_MAX), 0b11111111_u8);
}

TEST(LlvmLibcIntegerLiteralTest, u16) {
EXPECT_EQ(uint16_t(0), 0_u16);
EXPECT_EQ(uint16_t(UINT8_MAX), 255_u16);
EXPECT_EQ(uint16_t(UINT8_MAX), 0xFF_u16);
EXPECT_EQ(uint16_t(UINT8_MAX), 0b11111111_u16);
EXPECT_EQ(uint16_t(UINT16_MAX), 65535_u16);
EXPECT_EQ(uint16_t(UINT16_MAX), 0xFFFF_u16);
EXPECT_EQ(uint16_t(UINT16_MAX), 0b11111111'11111111_u16);
}

TEST(LlvmLibcIntegerLiteralTest, u32) {
EXPECT_EQ(uint32_t(0), 0_u32);
EXPECT_EQ(uint32_t(UINT8_MAX), 255_u32);
EXPECT_EQ(uint32_t(UINT8_MAX), 0xFF_u32);
EXPECT_EQ(uint32_t(UINT8_MAX), 0b11111111_u32);
EXPECT_EQ(uint32_t(UINT16_MAX), 65535_u32);
EXPECT_EQ(uint32_t(UINT16_MAX), 0xFFFF_u32);
EXPECT_EQ(uint32_t(UINT16_MAX), 0b11111111'11111111_u32);
EXPECT_EQ(uint32_t(UINT32_MAX), 4294967295_u32);
EXPECT_EQ(uint32_t(UINT32_MAX), 0xFFFFFFFF_u32);
EXPECT_EQ(uint32_t(UINT32_MAX), 0b1111111111111111'1111111111111111_u32);
}

TEST(LlvmLibcIntegerLiteralTest, u64) {
EXPECT_EQ(uint64_t(0), 0_u64);
EXPECT_EQ(uint64_t(UINT8_MAX), 255_u64);
EXPECT_EQ(uint64_t(UINT8_MAX), 0xFF_u64);
EXPECT_EQ(uint64_t(UINT8_MAX), 0b11111111_u64);
EXPECT_EQ(uint64_t(UINT16_MAX), 65535_u64);
EXPECT_EQ(uint64_t(UINT16_MAX), 0xFFFF_u64);
EXPECT_EQ(uint64_t(UINT16_MAX), 0b11111111'11111111_u64);
EXPECT_EQ(uint64_t(UINT32_MAX), 4294967295_u64);
EXPECT_EQ(uint64_t(UINT32_MAX), 0xFFFFFFFF_u64);
EXPECT_EQ(uint64_t(UINT32_MAX), 0b1111111111111111'1111111111111111_u64);
EXPECT_EQ(uint64_t(UINT64_MAX), 18446744073709551615_u64);
EXPECT_EQ(uint64_t(UINT64_MAX), 0xFFFFFFFF'FFFFFFFF_u64);
EXPECT_EQ(
uint64_t(UINT64_MAX),
0b1111111111111111'1111111111111111'1111111111111111'1111111111111111_u64);
}

TEST(LlvmLibcIntegerLiteralTest, u128) {
#if defined(__SIZEOF_INT128__)
const __uint128_t ZERO = 0;
const __uint128_t U8_MAX = UINT8_MAX;
const __uint128_t U16_MAX = UINT16_MAX;
const __uint128_t U32_MAX = UINT32_MAX;
const __uint128_t U64_MAX = UINT64_MAX;
const __uint128_t U128_MAX = (U64_MAX << 64) | U64_MAX;
#else
const UInt128 ZERO = 0;
const UInt128 U8_MAX = UINT8_MAX;
const UInt128 U16_MAX = UINT16_MAX;
const UInt128 U32_MAX = UINT32_MAX;
const UInt128 U64_MAX = UINT64_MAX;
const UInt128 U128_MAX = (U64_MAX << 64) | U64_MAX;
#endif
EXPECT_EQ(ZERO, 0_u128);
EXPECT_EQ(U8_MAX, 255_u128);
EXPECT_EQ(U8_MAX, 0xFF_u128);
EXPECT_EQ(U8_MAX, 0b11111111_u128);
EXPECT_EQ(U16_MAX, 65535_u128);
EXPECT_EQ(U16_MAX, 0xFFFF_u128);
EXPECT_EQ(U16_MAX, 0b11111111'11111111_u128);
EXPECT_EQ(U32_MAX, 4294967295_u128);
EXPECT_EQ(U32_MAX, 0xFFFFFFFF_u128);
EXPECT_EQ(U32_MAX, 0b1111111111111111'1111111111111111_u128);
EXPECT_EQ(U64_MAX, 18446744073709551615_u128);
EXPECT_EQ(U64_MAX, 0xFFFFFFFF'FFFFFFFF_u128);
EXPECT_EQ(
U64_MAX,
0b1111111111111111'1111111111111111'1111111111111111'1111111111111111_u128);
EXPECT_EQ(U128_MAX, 340282366920938463463374607431768211455_u128);
EXPECT_EQ(U128_MAX, 0xFFFFFFFF'FFFFFFFF'FFFFFFFF'FFFFFFFF_u128);
EXPECT_EQ(
U128_MAX,
0b1111111111111111'1111111111111111'1111111111111111'1111111111111111'1111111111111111'1111111111111111'1111111111111111'1111111111111111_u128);
}

TEST(LlvmLibcIntegerLiteralTest, u256) {
using UInt256 = LIBC_NAMESPACE::cpp::UInt<256>;
const UInt256 ZERO = 0;
const UInt256 U8_MAX = UINT8_MAX;
const UInt256 U16_MAX = UINT16_MAX;
const UInt256 U32_MAX = UINT32_MAX;
const UInt256 U64_MAX = UINT64_MAX;
const UInt256 U128_MAX = (U64_MAX << 64) | U64_MAX;
const UInt256 U256_MAX = (U128_MAX << 128) | U128_MAX;
EXPECT_EQ(ZERO, 0_u256);
EXPECT_EQ(U8_MAX, 255_u256);
EXPECT_EQ(U8_MAX, 0xFF_u256);
EXPECT_EQ(U8_MAX, 0b11111111_u256);
EXPECT_EQ(U16_MAX, 65535_u256);
EXPECT_EQ(U16_MAX, 0xFFFF_u256);
EXPECT_EQ(U16_MAX, 0b11111111'11111111_u256);
EXPECT_EQ(U32_MAX, 4294967295_u256);
EXPECT_EQ(U32_MAX, 0xFFFFFFFF_u256);
EXPECT_EQ(U32_MAX, 0b1111111111111111'1111111111111111_u256);
EXPECT_EQ(U64_MAX, 18446744073709551615_u256);
EXPECT_EQ(U64_MAX, 0xFFFFFFFF'FFFFFFFF_u256);
EXPECT_EQ(
U64_MAX,
0b1111111111111111'1111111111111111'1111111111111111'1111111111111111_u256);
EXPECT_EQ(U128_MAX, 0xFFFFFFFF'FFFFFFFF'FFFFFFFF'FFFFFFFF_u256);
EXPECT_EQ(
U256_MAX,
0xFFFFFFFF'FFFFFFFF'FFFFFFFF'FFFFFFFF'FFFFFFFF'FFFFFFFF'FFFFFFFF'FFFFFFFF_u256);
}
9 changes: 9 additions & 0 deletions utils/bazel/llvm-project-overlay/libc/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,15 @@ libc_support_library(
],
)

libc_support_library(
name = "__support_integer_literals",
hdrs = ["src/__support/integer_literals.h"],
deps = [
":__support_cpp_limits",
":__support_uint128",
],
)

libc_support_library(
name = "__support_str_to_num_result",
hdrs = ["src/__support/str_to_num_result.h"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,11 @@ libc_test(
"//libc:__support_char_vector",
],
)

libc_test(
name = "integer_literals_test",
srcs = ["integer_literals_test.cpp"],
deps = [
"//libc:__support_integer_literals",
],
)
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ libc_test(
deps = [
"//libc:__support_fputil_fp_bits",
"//libc:__support_fputil_fpbits_str",
"//libc:__support_integer_literals",
],
)

Expand Down