xref: /llvm-project/libc/test/src/__support/FPUtil/fpbits_test.cpp (revision 6aa74038588ed47e3fc0d829c1e7538cc110ba39)
15b079af1SMichael Jones //===-- Unittests for the FPBits class ------------------------------------===//
200bd8e90SSiva Chandra Reddy //
300bd8e90SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
400bd8e90SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
500bd8e90SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
600bd8e90SSiva Chandra Reddy //
700bd8e90SSiva Chandra Reddy //===----------------------------------------------------------------------===//
800bd8e90SSiva Chandra Reddy 
900bd8e90SSiva Chandra Reddy #include "src/__support/FPUtil/FPBits.h"
1037458f66STue Ly #include "src/__support/FPUtil/fpbits_str.h"
117302c8dbSNick Desaulniers #include "src/__support/big_int.h"
1203232350SGuillaume Chatelet #include "src/__support/integer_literals.h"
13ded08015SSirui Mu #include "src/__support/macros/properties/types.h"
142137894aSGuillaume Chatelet #include "src/__support/sign.h" // Sign
1500bd8e90SSiva Chandra Reddy #include "test/UnitTest/Test.h"
1600bd8e90SSiva Chandra Reddy 
17f6b2a222SMichael Jones using LIBC_NAMESPACE::Sign;
187302c8dbSNick Desaulniers using LIBC_NAMESPACE::UInt;
19b6bc9d72SGuillaume Chatelet using LIBC_NAMESPACE::fputil::FPBits;
20fd3edd45SGuillaume Chatelet using LIBC_NAMESPACE::fputil::FPType;
21fd3edd45SGuillaume Chatelet using LIBC_NAMESPACE::fputil::internal::FPRep;
2200bd8e90SSiva Chandra Reddy 
2303232350SGuillaume Chatelet using LIBC_NAMESPACE::operator""_u16;
2403232350SGuillaume Chatelet using LIBC_NAMESPACE::operator""_u32;
2503232350SGuillaume Chatelet using LIBC_NAMESPACE::operator""_u64;
267302c8dbSNick Desaulniers using LIBC_NAMESPACE::operator""_u96;
2703232350SGuillaume Chatelet using LIBC_NAMESPACE::operator""_u128;
2803232350SGuillaume Chatelet 
295ddd7bc3SGuillaume Chatelet TEST(LlvmLibcFPBitsTest, FPType_IEEE754_Binary16) {
305ddd7bc3SGuillaume Chatelet   using Rep = FPRep<FPType::IEEE754_Binary16>;
311edb43f6SGuillaume Chatelet   using u16 = typename Rep::StorageType;
325ddd7bc3SGuillaume Chatelet 
3303232350SGuillaume Chatelet   EXPECT_EQ(0b0'00000'0000000000_u16, u16(Rep::zero()));
3403232350SGuillaume Chatelet   EXPECT_EQ(0b0'01111'0000000000_u16, u16(Rep::one()));
3503232350SGuillaume Chatelet   EXPECT_EQ(0b0'00000'0000000001_u16, u16(Rep::min_subnormal()));
3603232350SGuillaume Chatelet   EXPECT_EQ(0b0'00000'1111111111_u16, u16(Rep::max_subnormal()));
3703232350SGuillaume Chatelet   EXPECT_EQ(0b0'00001'0000000000_u16, u16(Rep::min_normal()));
3803232350SGuillaume Chatelet   EXPECT_EQ(0b0'11110'1111111111_u16, u16(Rep::max_normal()));
3903232350SGuillaume Chatelet   EXPECT_EQ(0b0'11111'0000000000_u16, u16(Rep::inf()));
4003232350SGuillaume Chatelet   EXPECT_EQ(0b0'11111'0100000000_u16, u16(Rep::signaling_nan()));
4103232350SGuillaume Chatelet   EXPECT_EQ(0b0'11111'1000000000_u16, u16(Rep::quiet_nan()));
425ddd7bc3SGuillaume Chatelet }
435ddd7bc3SGuillaume Chatelet 
445ddd7bc3SGuillaume Chatelet TEST(LlvmLibcFPBitsTest, FPType_IEEE754_Binary32) {
455ddd7bc3SGuillaume Chatelet   using Rep = FPRep<FPType::IEEE754_Binary32>;
461edb43f6SGuillaume Chatelet   using u32 = typename Rep::StorageType;
475ddd7bc3SGuillaume Chatelet 
4803232350SGuillaume Chatelet   EXPECT_EQ(0b0'00000000'00000000000000000000000_u32, u32(Rep::zero()));
4903232350SGuillaume Chatelet   EXPECT_EQ(0b0'01111111'00000000000000000000000_u32, u32(Rep::one()));
5003232350SGuillaume Chatelet   EXPECT_EQ(0b0'00000000'00000000000000000000001_u32,
511edb43f6SGuillaume Chatelet             u32(Rep::min_subnormal()));
5203232350SGuillaume Chatelet   EXPECT_EQ(0b0'00000000'11111111111111111111111_u32,
531edb43f6SGuillaume Chatelet             u32(Rep::max_subnormal()));
5403232350SGuillaume Chatelet   EXPECT_EQ(0b0'00000001'00000000000000000000000_u32, u32(Rep::min_normal()));
5503232350SGuillaume Chatelet   EXPECT_EQ(0b0'11111110'11111111111111111111111_u32, u32(Rep::max_normal()));
5603232350SGuillaume Chatelet   EXPECT_EQ(0b0'11111111'00000000000000000000000_u32, u32(Rep::inf()));
5703232350SGuillaume Chatelet   EXPECT_EQ(0b0'11111111'01000000000000000000000_u32,
58ace383dfSGuillaume Chatelet             u32(Rep::signaling_nan()));
5903232350SGuillaume Chatelet   EXPECT_EQ(0b0'11111111'10000000000000000000000_u32, u32(Rep::quiet_nan()));
605ddd7bc3SGuillaume Chatelet }
615ddd7bc3SGuillaume Chatelet 
625ddd7bc3SGuillaume Chatelet TEST(LlvmLibcFPBitsTest, FPType_IEEE754_Binary64) {
635ddd7bc3SGuillaume Chatelet   using Rep = FPRep<FPType::IEEE754_Binary64>;
641edb43f6SGuillaume Chatelet   using u64 = typename Rep::StorageType;
655ddd7bc3SGuillaume Chatelet 
665ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
6703232350SGuillaume Chatelet       0b0'00000000000'0000000000000000000000000000000000000000000000000000_u64,
681edb43f6SGuillaume Chatelet       u64(Rep::zero()));
695ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
7003232350SGuillaume Chatelet       0b0'01111111111'0000000000000000000000000000000000000000000000000000_u64,
711edb43f6SGuillaume Chatelet       u64(Rep::one()));
725ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
7303232350SGuillaume Chatelet       0b0'00000000000'0000000000000000000000000000000000000000000000000001_u64,
741edb43f6SGuillaume Chatelet       u64(Rep::min_subnormal()));
755ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
7603232350SGuillaume Chatelet       0b0'00000000000'1111111111111111111111111111111111111111111111111111_u64,
771edb43f6SGuillaume Chatelet       u64(Rep::max_subnormal()));
785ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
7903232350SGuillaume Chatelet       0b0'00000000001'0000000000000000000000000000000000000000000000000000_u64,
801edb43f6SGuillaume Chatelet       u64(Rep::min_normal()));
815ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
8203232350SGuillaume Chatelet       0b0'11111111110'1111111111111111111111111111111111111111111111111111_u64,
831edb43f6SGuillaume Chatelet       u64(Rep::max_normal()));
845ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
8503232350SGuillaume Chatelet       0b0'11111111111'0000000000000000000000000000000000000000000000000000_u64,
861edb43f6SGuillaume Chatelet       u64(Rep::inf()));
875ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
8803232350SGuillaume Chatelet       0b0'11111111111'0100000000000000000000000000000000000000000000000000_u64,
89ace383dfSGuillaume Chatelet       u64(Rep::signaling_nan()));
905ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
9103232350SGuillaume Chatelet       0b0'11111111111'1000000000000000000000000000000000000000000000000000_u64,
92ace383dfSGuillaume Chatelet       u64(Rep::quiet_nan()));
935ddd7bc3SGuillaume Chatelet }
945ddd7bc3SGuillaume Chatelet 
951edb43f6SGuillaume Chatelet TEST(LlvmLibcFPBitsTest, FPType_IEEE754_Binary128) {
961edb43f6SGuillaume Chatelet   using Rep = FPRep<FPType::IEEE754_Binary128>;
971edb43f6SGuillaume Chatelet 
981edb43f6SGuillaume Chatelet   EXPECT_EQ(
9903232350SGuillaume Chatelet       0b0'000000000000000'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_u128,
1001edb43f6SGuillaume Chatelet       UInt128(Rep::zero()));
1011edb43f6SGuillaume Chatelet   EXPECT_EQ(
10203232350SGuillaume Chatelet       0b0'011111111111111'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_u128,
1031edb43f6SGuillaume Chatelet       UInt128(Rep::one()));
1041edb43f6SGuillaume Chatelet   EXPECT_EQ(
10503232350SGuillaume Chatelet       0b0'000000000000000'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001_u128,
1061edb43f6SGuillaume Chatelet       UInt128(Rep::min_subnormal()));
1071edb43f6SGuillaume Chatelet   EXPECT_EQ(
10803232350SGuillaume Chatelet       0b0'000000000000000'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111_u128,
1091edb43f6SGuillaume Chatelet       UInt128(Rep::max_subnormal()));
1101edb43f6SGuillaume Chatelet   EXPECT_EQ(
11103232350SGuillaume Chatelet       0b0'000000000000001'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_u128,
1121edb43f6SGuillaume Chatelet       UInt128(Rep::min_normal()));
1131edb43f6SGuillaume Chatelet   EXPECT_EQ(
11403232350SGuillaume Chatelet       0b0'111111111111110'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111_u128,
1151edb43f6SGuillaume Chatelet       UInt128(Rep::max_normal()));
1161edb43f6SGuillaume Chatelet   EXPECT_EQ(
11703232350SGuillaume Chatelet       0b0'111111111111111'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_u128,
1181edb43f6SGuillaume Chatelet       UInt128(Rep::inf()));
1191edb43f6SGuillaume Chatelet   EXPECT_EQ(
12003232350SGuillaume Chatelet       0b0'111111111111111'0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_u128,
121ace383dfSGuillaume Chatelet       UInt128(Rep::signaling_nan()));
1221edb43f6SGuillaume Chatelet   EXPECT_EQ(
12303232350SGuillaume Chatelet       0b0'111111111111111'1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000_u128,
124ace383dfSGuillaume Chatelet       UInt128(Rep::quiet_nan()));
1251edb43f6SGuillaume Chatelet }
1261edb43f6SGuillaume Chatelet 
127*6aa74038SMichael Jones #ifdef LIBC_TYPES_LONG_DOUBLE_IS_X86_FLOAT80
1285ddd7bc3SGuillaume Chatelet TEST(LlvmLibcFPBitsTest, FPType_X86_Binary80) {
1295ddd7bc3SGuillaume Chatelet   using Rep = FPRep<FPType::X86_Binary80>;
1305ddd7bc3SGuillaume Chatelet 
1317302c8dbSNick Desaulniers #if __SIZEOF_LONG_DOUBLE__ == 16
1325ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
13303232350SGuillaume Chatelet       0b0'0000000000000000000000000000000000000000000000000000000000000000000000000000000_u128,
1341edb43f6SGuillaume Chatelet       UInt128(Rep::zero()));
1355ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
13603232350SGuillaume Chatelet       0b0'0111111111111111000000000000000000000000000000000000000000000000000000000000000_u128,
1371edb43f6SGuillaume Chatelet       UInt128(Rep::one()));
1385ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
13903232350SGuillaume Chatelet       0b0'0000000000000000000000000000000000000000000000000000000000000000000000000000001_u128,
1401edb43f6SGuillaume Chatelet       UInt128(Rep::min_subnormal()));
1415ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
14203232350SGuillaume Chatelet       0b0'0000000000000000111111111111111111111111111111111111111111111111111111111111111_u128,
1431edb43f6SGuillaume Chatelet       UInt128(Rep::max_subnormal()));
1445ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
14503232350SGuillaume Chatelet       0b0'0000000000000011000000000000000000000000000000000000000000000000000000000000000_u128,
1461edb43f6SGuillaume Chatelet       UInt128(Rep::min_normal()));
1475ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
14803232350SGuillaume Chatelet       0b0'1111111111111101111111111111111111111111111111111111111111111111111111111111111_u128,
1491edb43f6SGuillaume Chatelet       UInt128(Rep::max_normal()));
1505ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
15103232350SGuillaume Chatelet       0b0'1111111111111111000000000000000000000000000000000000000000000000000000000000000_u128,
1521edb43f6SGuillaume Chatelet       UInt128(Rep::inf()));
1535ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
15403232350SGuillaume Chatelet       0b0'1111111111111111010000000000000000000000000000000000000000000000000000000000000_u128,
155ace383dfSGuillaume Chatelet       UInt128(Rep::signaling_nan()));
1565ddd7bc3SGuillaume Chatelet   EXPECT_EQ(
15703232350SGuillaume Chatelet       0b0'1111111111111111100000000000000000000000000000000000000000000000000000000000000_u128,
158ace383dfSGuillaume Chatelet       UInt128(Rep::quiet_nan()));
1597302c8dbSNick Desaulniers #elif __SIZEOF_LONG_DOUBLE__ == 12
1607302c8dbSNick Desaulniers   EXPECT_EQ(
1617302c8dbSNick Desaulniers       0b0'0000000000000000000000000000000000000000000000000000000000000000000000000000000_u96,
1627302c8dbSNick Desaulniers       UInt<96>(Rep::zero()));
1637302c8dbSNick Desaulniers   EXPECT_EQ(
1647302c8dbSNick Desaulniers       0b0'0111111111111111000000000000000000000000000000000000000000000000000000000000000_u96,
1657302c8dbSNick Desaulniers       UInt<96>(Rep::one()));
1667302c8dbSNick Desaulniers   EXPECT_EQ(
1677302c8dbSNick Desaulniers       0b0'0000000000000000000000000000000000000000000000000000000000000000000000000000001_u96,
1687302c8dbSNick Desaulniers       UInt<96>(Rep::min_subnormal()));
1697302c8dbSNick Desaulniers   EXPECT_EQ(
1707302c8dbSNick Desaulniers       0b0'0000000000000000111111111111111111111111111111111111111111111111111111111111111_u96,
1717302c8dbSNick Desaulniers       UInt<96>(Rep::max_subnormal()));
1727302c8dbSNick Desaulniers   EXPECT_EQ(
1737302c8dbSNick Desaulniers       0b0'0000000000000011000000000000000000000000000000000000000000000000000000000000000_u96,
1747302c8dbSNick Desaulniers       UInt<96>(Rep::min_normal()));
1757302c8dbSNick Desaulniers   EXPECT_EQ(
1767302c8dbSNick Desaulniers       0b0'1111111111111101111111111111111111111111111111111111111111111111111111111111111_u96,
1777302c8dbSNick Desaulniers       UInt<96>(Rep::max_normal()));
1787302c8dbSNick Desaulniers   EXPECT_EQ(
1797302c8dbSNick Desaulniers       0b0'1111111111111111000000000000000000000000000000000000000000000000000000000000000_u96,
1807302c8dbSNick Desaulniers       UInt<96>(Rep::inf()));
1817302c8dbSNick Desaulniers   EXPECT_EQ(
1827302c8dbSNick Desaulniers       0b0'1111111111111111010000000000000000000000000000000000000000000000000000000000000_u96,
1837302c8dbSNick Desaulniers       UInt<96>(Rep::signaling_nan()));
1847302c8dbSNick Desaulniers   EXPECT_EQ(
1857302c8dbSNick Desaulniers       0b0'1111111111111111100000000000000000000000000000000000000000000000000000000000000_u96,
1867302c8dbSNick Desaulniers       UInt<96>(Rep::quiet_nan()));
1877302c8dbSNick Desaulniers #else
1887302c8dbSNick Desaulniers #error "unhandled long double type"
1897302c8dbSNick Desaulniers #endif
1905ddd7bc3SGuillaume Chatelet }
1915ddd7bc3SGuillaume Chatelet 
1925ddd7bc3SGuillaume Chatelet TEST(LlvmLibcFPBitsTest, FPType_X86_Binary80_IsNan) {
1935ddd7bc3SGuillaume Chatelet   using Rep = FPRep<FPType::X86_Binary80>;
1945ddd7bc3SGuillaume Chatelet 
1957302c8dbSNick Desaulniers #if __SIZEOF_LONG_DOUBLE__ == 16
19603232350SGuillaume Chatelet   EXPECT_TRUE( // NAN : Pseudo-Infinity
19703232350SGuillaume Chatelet       Rep(0b0'111111111111111'0000000000000000000000000000000000000000000000000000000000000000_u128)
19803232350SGuillaume Chatelet           .is_nan());
19903232350SGuillaume Chatelet   EXPECT_TRUE( // NAN : Pseudo Not a Number
20003232350SGuillaume Chatelet       Rep(0b0'111111111111111'0000000000000000000000000000000000000000000000000000000000000001_u128)
20103232350SGuillaume Chatelet           .is_nan());
20203232350SGuillaume Chatelet   EXPECT_TRUE( // NAN : Pseudo Not a Number
20303232350SGuillaume Chatelet       Rep(0b0'111111111111111'0100000000000000000000000000000000000000000000000000000000000000_u128)
20403232350SGuillaume Chatelet           .is_nan());
20503232350SGuillaume Chatelet   EXPECT_TRUE( // NAN : Signalling Not a Number
20603232350SGuillaume Chatelet       Rep(0b0'111111111111111'1000000000000000000000000000000000000000000000000000000000000001_u128)
20703232350SGuillaume Chatelet           .is_nan());
20803232350SGuillaume Chatelet   EXPECT_TRUE( // NAN : Floating-point Indefinite
20903232350SGuillaume Chatelet       Rep(0b0'111111111111111'1100000000000000000000000000000000000000000000000000000000000000_u128)
21003232350SGuillaume Chatelet           .is_nan());
21103232350SGuillaume Chatelet   EXPECT_TRUE( // NAN : Quiet Not a Number
21203232350SGuillaume Chatelet       Rep(0b0'111111111111111'1100000000000000000000000000000000000000000000000000000000000001_u128)
21303232350SGuillaume Chatelet           .is_nan());
21403232350SGuillaume Chatelet   EXPECT_TRUE( // NAN : Unnormal
21503232350SGuillaume Chatelet       Rep(0b0'111111111111110'0000000000000000000000000000000000000000000000000000000000000000_u128)
21603232350SGuillaume Chatelet           .is_nan());
21703232350SGuillaume Chatelet   EXPECT_FALSE( // Zero
21803232350SGuillaume Chatelet       Rep(0b0'000000000000000'0000000000000000000000000000000000000000000000000000000000000000_u128)
21903232350SGuillaume Chatelet           .is_nan());
22003232350SGuillaume Chatelet   EXPECT_FALSE( // Subnormal
22103232350SGuillaume Chatelet       Rep(0b0'000000000000000'0000000000000000000000000000000000000000000000000000000000000001_u128)
22203232350SGuillaume Chatelet           .is_nan());
22303232350SGuillaume Chatelet   EXPECT_FALSE( // Pseudo Denormal
22403232350SGuillaume Chatelet       Rep(0b0'000000000000000'1000000000000000000000000000000000000000000000000000000000000001_u128)
22503232350SGuillaume Chatelet           .is_nan());
22603232350SGuillaume Chatelet   EXPECT_FALSE( // Infinity
22703232350SGuillaume Chatelet       Rep(0b0'111111111111111'1000000000000000000000000000000000000000000000000000000000000000_u128)
22803232350SGuillaume Chatelet           .is_nan());
22903232350SGuillaume Chatelet   EXPECT_FALSE( // Normalized
23003232350SGuillaume Chatelet       Rep(0b0'111111111111110'1000000000000000000000000000000000000000000000000000000000000000_u128)
23103232350SGuillaume Chatelet           .is_nan());
2327302c8dbSNick Desaulniers #elif __SIZEOF_LONG_DOUBLE__ == 12
2337302c8dbSNick Desaulniers   EXPECT_TRUE( // NAN : Pseudo-Infinity
2347302c8dbSNick Desaulniers       Rep(0b0'111111111111111'0000000000000000000000000000000000000000000000000000000000000000_u96)
2357302c8dbSNick Desaulniers           .is_nan());
2367302c8dbSNick Desaulniers   EXPECT_TRUE( // NAN : Pseudo Not a Number
2377302c8dbSNick Desaulniers       Rep(0b0'111111111111111'0000000000000000000000000000000000000000000000000000000000000001_u96)
2387302c8dbSNick Desaulniers           .is_nan());
2397302c8dbSNick Desaulniers   EXPECT_TRUE( // NAN : Pseudo Not a Number
2407302c8dbSNick Desaulniers       Rep(0b0'111111111111111'0100000000000000000000000000000000000000000000000000000000000000_u96)
2417302c8dbSNick Desaulniers           .is_nan());
2427302c8dbSNick Desaulniers   EXPECT_TRUE( // NAN : Signalling Not a Number
2437302c8dbSNick Desaulniers       Rep(0b0'111111111111111'1000000000000000000000000000000000000000000000000000000000000001_u96)
2447302c8dbSNick Desaulniers           .is_nan());
2457302c8dbSNick Desaulniers   EXPECT_TRUE( // NAN : Floating-point Indefinite
2467302c8dbSNick Desaulniers       Rep(0b0'111111111111111'1100000000000000000000000000000000000000000000000000000000000000_u96)
2477302c8dbSNick Desaulniers           .is_nan());
2487302c8dbSNick Desaulniers   EXPECT_TRUE( // NAN : Quiet Not a Number
2497302c8dbSNick Desaulniers       Rep(0b0'111111111111111'1100000000000000000000000000000000000000000000000000000000000001_u96)
2507302c8dbSNick Desaulniers           .is_nan());
2517302c8dbSNick Desaulniers   EXPECT_TRUE( // NAN : Unnormal
2527302c8dbSNick Desaulniers       Rep(0b0'111111111111110'0000000000000000000000000000000000000000000000000000000000000000_u96)
2537302c8dbSNick Desaulniers           .is_nan());
2547302c8dbSNick Desaulniers   EXPECT_FALSE( // Zero
2557302c8dbSNick Desaulniers       Rep(0b0'000000000000000'0000000000000000000000000000000000000000000000000000000000000000_u96)
2567302c8dbSNick Desaulniers           .is_nan());
2577302c8dbSNick Desaulniers   EXPECT_FALSE( // Subnormal
2587302c8dbSNick Desaulniers       Rep(0b0'000000000000000'0000000000000000000000000000000000000000000000000000000000000001_u96)
2597302c8dbSNick Desaulniers           .is_nan());
2607302c8dbSNick Desaulniers   EXPECT_FALSE( // Pseudo Denormal
2617302c8dbSNick Desaulniers       Rep(0b0'000000000000000'1000000000000000000000000000000000000000000000000000000000000001_u96)
2627302c8dbSNick Desaulniers           .is_nan());
2637302c8dbSNick Desaulniers   EXPECT_FALSE( // Infinity
2647302c8dbSNick Desaulniers       Rep(0b0'111111111111111'1000000000000000000000000000000000000000000000000000000000000000_u96)
2657302c8dbSNick Desaulniers           .is_nan());
2667302c8dbSNick Desaulniers   EXPECT_FALSE( // Normalized
2677302c8dbSNick Desaulniers       Rep(0b0'111111111111110'1000000000000000000000000000000000000000000000000000000000000000_u96)
2687302c8dbSNick Desaulniers           .is_nan());
2697302c8dbSNick Desaulniers #else
2707302c8dbSNick Desaulniers #error "unhandled long double type"
2717302c8dbSNick Desaulniers #endif
2725ddd7bc3SGuillaume Chatelet }
273*6aa74038SMichael Jones #endif // LIBC_TYPES_LONG_DOUBLE_IS_X86_FLOAT80
2745ddd7bc3SGuillaume Chatelet 
275fd3edd45SGuillaume Chatelet enum class FP {
276fd3edd45SGuillaume Chatelet   ZERO,
277fd3edd45SGuillaume Chatelet   MIN_SUBNORMAL,
278fd3edd45SGuillaume Chatelet   MAX_SUBNORMAL,
279fd3edd45SGuillaume Chatelet   MIN_NORMAL,
280fd3edd45SGuillaume Chatelet   ONE,
281fd3edd45SGuillaume Chatelet   MAX_NORMAL,
282fd3edd45SGuillaume Chatelet   INF,
283ace383dfSGuillaume Chatelet   SIGNALING_NAN,
284ace383dfSGuillaume Chatelet   QUIET_NAN
285fd3edd45SGuillaume Chatelet };
286fd3edd45SGuillaume Chatelet 
28725ab2fc0SGuillaume Chatelet constexpr FP all_fp_values[] = {
28825ab2fc0SGuillaume Chatelet     FP::ZERO,       FP::MIN_SUBNORMAL, FP::MAX_SUBNORMAL,
28925ab2fc0SGuillaume Chatelet     FP::MIN_NORMAL, FP::ONE,           FP::MAX_NORMAL,
29025ab2fc0SGuillaume Chatelet     FP::INF,        FP::SIGNALING_NAN, FP::QUIET_NAN,
29125ab2fc0SGuillaume Chatelet };
29225ab2fc0SGuillaume Chatelet 
29325ab2fc0SGuillaume Chatelet constexpr Sign all_signs[] = {Sign::POS, Sign::NEG};
29425ab2fc0SGuillaume Chatelet 
295fd3edd45SGuillaume Chatelet using FPTypes = LIBC_NAMESPACE::testing::TypeList<
296fd3edd45SGuillaume Chatelet     FPRep<FPType::IEEE754_Binary16>, FPRep<FPType::IEEE754_Binary32>,
297fd3edd45SGuillaume Chatelet     FPRep<FPType::IEEE754_Binary64>, FPRep<FPType::IEEE754_Binary128>,
298fd3edd45SGuillaume Chatelet     FPRep<FPType::X86_Binary80>>;
299fd3edd45SGuillaume Chatelet 
30025ab2fc0SGuillaume Chatelet template <typename T> constexpr auto make(Sign sign, FP fp) {
301fd3edd45SGuillaume Chatelet   switch (fp) {
302fd3edd45SGuillaume Chatelet   case FP::ZERO:
303fd3edd45SGuillaume Chatelet     return T::zero(sign);
304fd3edd45SGuillaume Chatelet   case FP::MIN_SUBNORMAL:
305fd3edd45SGuillaume Chatelet     return T::min_subnormal(sign);
306fd3edd45SGuillaume Chatelet   case FP::MAX_SUBNORMAL:
307fd3edd45SGuillaume Chatelet     return T::max_subnormal(sign);
308fd3edd45SGuillaume Chatelet   case FP::MIN_NORMAL:
309fd3edd45SGuillaume Chatelet     return T::min_normal(sign);
310fd3edd45SGuillaume Chatelet   case FP::ONE:
311fd3edd45SGuillaume Chatelet     return T::one(sign);
312fd3edd45SGuillaume Chatelet   case FP::MAX_NORMAL:
313fd3edd45SGuillaume Chatelet     return T::max_normal(sign);
314fd3edd45SGuillaume Chatelet   case FP::INF:
315fd3edd45SGuillaume Chatelet     return T::inf(sign);
316ace383dfSGuillaume Chatelet   case FP::SIGNALING_NAN:
317ace383dfSGuillaume Chatelet     return T::signaling_nan(sign);
318ace383dfSGuillaume Chatelet   case FP::QUIET_NAN:
319ace383dfSGuillaume Chatelet     return T::quiet_nan(sign);
320fd3edd45SGuillaume Chatelet   }
32188f0dc48SOverMighty   __builtin_unreachable();
322e973ab15Slntue }
32325ab2fc0SGuillaume Chatelet 
32425ab2fc0SGuillaume Chatelet // Tests all properties for all types of float.
32525ab2fc0SGuillaume Chatelet TYPED_TEST(LlvmLibcFPBitsTest, Properties, FPTypes) {
32625ab2fc0SGuillaume Chatelet   for (Sign sign : all_signs) {
32725ab2fc0SGuillaume Chatelet     for (FP fp : all_fp_values) {
32825ab2fc0SGuillaume Chatelet       const T value = make<T>(sign, fp);
329fd3edd45SGuillaume Chatelet       // is_zero
330fd3edd45SGuillaume Chatelet       ASSERT_EQ(value.is_zero(), fp == FP::ZERO);
331fd3edd45SGuillaume Chatelet       // is_inf_or_nan
332ace383dfSGuillaume Chatelet       ASSERT_EQ(value.is_inf_or_nan(), fp == FP::INF ||
333ace383dfSGuillaume Chatelet                                            fp == FP::SIGNALING_NAN ||
334ace383dfSGuillaume Chatelet                                            fp == FP::QUIET_NAN);
335fd3edd45SGuillaume Chatelet       // is_finite
336ace383dfSGuillaume Chatelet       ASSERT_EQ(value.is_finite(), fp != FP::INF && fp != FP::SIGNALING_NAN &&
337ace383dfSGuillaume Chatelet                                        fp != FP::QUIET_NAN);
338fd3edd45SGuillaume Chatelet       // is_inf
339fd3edd45SGuillaume Chatelet       ASSERT_EQ(value.is_inf(), fp == FP::INF);
340fd3edd45SGuillaume Chatelet       // is_nan
341ace383dfSGuillaume Chatelet       ASSERT_EQ(value.is_nan(), fp == FP::SIGNALING_NAN || fp == FP::QUIET_NAN);
342fd3edd45SGuillaume Chatelet       // is_normal
343fd3edd45SGuillaume Chatelet       ASSERT_EQ(value.is_normal(),
344fd3edd45SGuillaume Chatelet                 fp == FP::MIN_NORMAL || fp == FP::ONE || fp == FP::MAX_NORMAL);
345fd3edd45SGuillaume Chatelet       // is_quiet_nan
346ace383dfSGuillaume Chatelet       ASSERT_EQ(value.is_quiet_nan(), fp == FP::QUIET_NAN);
347fd3edd45SGuillaume Chatelet       // is_signaling_nan
348ace383dfSGuillaume Chatelet       ASSERT_EQ(value.is_signaling_nan(), fp == FP::SIGNALING_NAN);
349fd3edd45SGuillaume Chatelet       // is_subnormal
350fd3edd45SGuillaume Chatelet       ASSERT_EQ(value.is_subnormal(), fp == FP::ZERO ||
351fd3edd45SGuillaume Chatelet                                           fp == FP::MIN_SUBNORMAL ||
352fd3edd45SGuillaume Chatelet                                           fp == FP::MAX_SUBNORMAL);
353fd3edd45SGuillaume Chatelet       // is_pos
354fd3edd45SGuillaume Chatelet       ASSERT_EQ(value.is_pos(), sign == Sign::POS);
355fd3edd45SGuillaume Chatelet       ASSERT_EQ(value.sign().is_pos(), sign == Sign::POS);
356fd3edd45SGuillaume Chatelet       // is_neg
357fd3edd45SGuillaume Chatelet       ASSERT_EQ(value.is_neg(), sign == Sign::NEG);
358fd3edd45SGuillaume Chatelet       ASSERT_EQ(value.sign().is_neg(), sign == Sign::NEG);
359fd3edd45SGuillaume Chatelet     }
360fd3edd45SGuillaume Chatelet   }
361fd3edd45SGuillaume Chatelet }
362fd3edd45SGuillaume Chatelet 
363b05ba231SGuillaume Chatelet #define ASSERT_SAME_REP(A, B) ASSERT_EQ(A.uintval(), B.uintval());
364b05ba231SGuillaume Chatelet 
365b05ba231SGuillaume Chatelet TYPED_TEST(LlvmLibcFPBitsTest, NextTowardInf, FPTypes) {
366b05ba231SGuillaume Chatelet   struct {
367b05ba231SGuillaume Chatelet     FP before, after;
368b05ba231SGuillaume Chatelet   } TEST_CASES[] = {
369b05ba231SGuillaume Chatelet       {FP::ZERO, FP::MIN_SUBNORMAL},          //
370b05ba231SGuillaume Chatelet       {FP::MAX_SUBNORMAL, FP::MIN_NORMAL},    //
371b05ba231SGuillaume Chatelet       {FP::MAX_NORMAL, FP::INF},              //
372b05ba231SGuillaume Chatelet       {FP::INF, FP::INF},                     //
373b05ba231SGuillaume Chatelet       {FP::QUIET_NAN, FP::QUIET_NAN},         //
374b05ba231SGuillaume Chatelet       {FP::SIGNALING_NAN, FP::SIGNALING_NAN}, //
375b05ba231SGuillaume Chatelet   };
376b05ba231SGuillaume Chatelet   for (Sign sign : all_signs) {
377b05ba231SGuillaume Chatelet     for (auto tc : TEST_CASES) {
378b05ba231SGuillaume Chatelet       T val = make<T>(sign, tc.before);
379b05ba231SGuillaume Chatelet       ASSERT_SAME_REP(val.next_toward_inf(), make<T>(sign, tc.after));
380b05ba231SGuillaume Chatelet     }
381b05ba231SGuillaume Chatelet   }
382b05ba231SGuillaume Chatelet }
383b05ba231SGuillaume Chatelet 
38400bd8e90SSiva Chandra Reddy TEST(LlvmLibcFPBitsTest, FloatType) {
385d2361b20Slntue   using FloatBits = FPBits<float>;
386d2361b20Slntue 
3876b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(FloatBits::inf(Sign::POS)).c_str(),
388b6bc9d72SGuillaume Chatelet                "(+Infinity)");
3896b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(FloatBits::inf(Sign::NEG)).c_str(),
39037458f66STue Ly                "(-Infinity)");
391ace383dfSGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(FloatBits::signaling_nan()).c_str(),
392ace383dfSGuillaume Chatelet                "(NaN)");
39300bd8e90SSiva Chandra Reddy 
394d2361b20Slntue   FloatBits zero(0.0f);
39511ec512fSGuillaume Chatelet   EXPECT_TRUE(zero.is_pos());
39603232350SGuillaume Chatelet   EXPECT_EQ(zero.get_biased_exponent(), 0_u16);
39703232350SGuillaume Chatelet   EXPECT_EQ(zero.get_mantissa(), 0_u32);
39803232350SGuillaume Chatelet   EXPECT_EQ(zero.uintval(), 0_u32);
399b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(zero).c_str(),
40000bd8e90SSiva Chandra Reddy                "0x00000000 = (S: 0, E: 0x0000, M: 0x00000000)");
40100bd8e90SSiva Chandra Reddy 
402d2361b20Slntue   FloatBits negzero(-0.0f);
40311ec512fSGuillaume Chatelet   EXPECT_TRUE(negzero.is_neg());
40403232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_biased_exponent(), 0_u16);
40503232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_mantissa(), 0_u32);
40603232350SGuillaume Chatelet   EXPECT_EQ(negzero.uintval(), 0x80000000_u32);
407b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negzero).c_str(),
40800bd8e90SSiva Chandra Reddy                "0x80000000 = (S: 1, E: 0x0000, M: 0x00000000)");
40900bd8e90SSiva Chandra Reddy 
410d2361b20Slntue   FloatBits one(1.0f);
41111ec512fSGuillaume Chatelet   EXPECT_TRUE(one.is_pos());
41203232350SGuillaume Chatelet   EXPECT_EQ(one.get_biased_exponent(), 0x7F_u16);
41303232350SGuillaume Chatelet   EXPECT_EQ(one.get_mantissa(), 0_u32);
41403232350SGuillaume Chatelet   EXPECT_EQ(one.uintval(), 0x3F800000_u32);
415b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(one).c_str(),
41600bd8e90SSiva Chandra Reddy                "0x3F800000 = (S: 0, E: 0x007F, M: 0x00000000)");
41700bd8e90SSiva Chandra Reddy 
418d2361b20Slntue   FloatBits negone(-1.0f);
41911ec512fSGuillaume Chatelet   EXPECT_TRUE(negone.is_neg());
42003232350SGuillaume Chatelet   EXPECT_EQ(negone.get_biased_exponent(), 0x7F_u16);
42103232350SGuillaume Chatelet   EXPECT_EQ(negone.get_mantissa(), 0_u32);
42203232350SGuillaume Chatelet   EXPECT_EQ(negone.uintval(), 0xBF800000_u32);
423b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negone).c_str(),
42400bd8e90SSiva Chandra Reddy                "0xBF800000 = (S: 1, E: 0x007F, M: 0x00000000)");
42500bd8e90SSiva Chandra Reddy 
426d2361b20Slntue   FloatBits num(1.125f);
42711ec512fSGuillaume Chatelet   EXPECT_TRUE(num.is_pos());
42803232350SGuillaume Chatelet   EXPECT_EQ(num.get_biased_exponent(), 0x7F_u16);
42903232350SGuillaume Chatelet   EXPECT_EQ(num.get_mantissa(), 0x00100000_u32);
43003232350SGuillaume Chatelet   EXPECT_EQ(num.uintval(), 0x3F900000_u32);
431b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(num).c_str(),
43200bd8e90SSiva Chandra Reddy                "0x3F900000 = (S: 0, E: 0x007F, M: 0x00100000)");
43300bd8e90SSiva Chandra Reddy 
434d2361b20Slntue   FloatBits negnum(-1.125f);
43511ec512fSGuillaume Chatelet   EXPECT_TRUE(negnum.is_neg());
43603232350SGuillaume Chatelet   EXPECT_EQ(negnum.get_biased_exponent(), 0x7F_u16);
43703232350SGuillaume Chatelet   EXPECT_EQ(negnum.get_mantissa(), 0x00100000_u32);
43803232350SGuillaume Chatelet   EXPECT_EQ(negnum.uintval(), 0xBF900000_u32);
439b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(),
44000bd8e90SSiva Chandra Reddy                "0xBF900000 = (S: 1, E: 0x007F, M: 0x00100000)");
44179a2e2b9SNishant Mittal 
442ace383dfSGuillaume Chatelet   FloatBits quiet_nan = FloatBits::quiet_nan();
44379a2e2b9SNishant Mittal   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
44400bd8e90SSiva Chandra Reddy }
44500bd8e90SSiva Chandra Reddy 
44600bd8e90SSiva Chandra Reddy TEST(LlvmLibcFPBitsTest, DoubleType) {
447d2361b20Slntue   using DoubleBits = FPBits<double>;
448d2361b20Slntue 
4496b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::inf(Sign::POS)).c_str(),
450b6bc9d72SGuillaume Chatelet                "(+Infinity)");
4516b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::inf(Sign::NEG)).c_str(),
45237458f66STue Ly                "(-Infinity)");
453ace383dfSGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::signaling_nan()).c_str(),
454ace383dfSGuillaume Chatelet                "(NaN)");
45500bd8e90SSiva Chandra Reddy 
456d2361b20Slntue   DoubleBits zero(0.0);
45711ec512fSGuillaume Chatelet   EXPECT_TRUE(zero.is_pos());
45803232350SGuillaume Chatelet   EXPECT_EQ(zero.get_biased_exponent(), 0_u16);
45903232350SGuillaume Chatelet   EXPECT_EQ(zero.get_mantissa(), 0_u64);
46003232350SGuillaume Chatelet   EXPECT_EQ(zero.uintval(), 0_u64);
461b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(zero).c_str(),
46200bd8e90SSiva Chandra Reddy                "0x0000000000000000 = (S: 0, E: 0x0000, M: 0x0000000000000000)");
46300bd8e90SSiva Chandra Reddy 
464d2361b20Slntue   DoubleBits negzero(-0.0);
46511ec512fSGuillaume Chatelet   EXPECT_TRUE(negzero.is_neg());
46603232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_biased_exponent(), 0_u16);
46703232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_mantissa(), 0_u64);
46803232350SGuillaume Chatelet   EXPECT_EQ(negzero.uintval(), 0x8000000000000000_u64);
469b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negzero).c_str(),
47000bd8e90SSiva Chandra Reddy                "0x8000000000000000 = (S: 1, E: 0x0000, M: 0x0000000000000000)");
47100bd8e90SSiva Chandra Reddy 
472d2361b20Slntue   DoubleBits one(1.0);
47311ec512fSGuillaume Chatelet   EXPECT_TRUE(one.is_pos());
47403232350SGuillaume Chatelet   EXPECT_EQ(one.get_biased_exponent(), 0x03FF_u16);
47503232350SGuillaume Chatelet   EXPECT_EQ(one.get_mantissa(), 0_u64);
47603232350SGuillaume Chatelet   EXPECT_EQ(one.uintval(), 0x3FF0000000000000_u64);
477b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(one).c_str(),
47800bd8e90SSiva Chandra Reddy                "0x3FF0000000000000 = (S: 0, E: 0x03FF, M: 0x0000000000000000)");
47900bd8e90SSiva Chandra Reddy 
480d2361b20Slntue   DoubleBits negone(-1.0);
48111ec512fSGuillaume Chatelet   EXPECT_TRUE(negone.is_neg());
48203232350SGuillaume Chatelet   EXPECT_EQ(negone.get_biased_exponent(), 0x03FF_u16);
48303232350SGuillaume Chatelet   EXPECT_EQ(negone.get_mantissa(), 0_u64);
48403232350SGuillaume Chatelet   EXPECT_EQ(negone.uintval(), 0xBFF0000000000000_u64);
485b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negone).c_str(),
48600bd8e90SSiva Chandra Reddy                "0xBFF0000000000000 = (S: 1, E: 0x03FF, M: 0x0000000000000000)");
48700bd8e90SSiva Chandra Reddy 
488d2361b20Slntue   DoubleBits num(1.125);
48911ec512fSGuillaume Chatelet   EXPECT_TRUE(num.is_pos());
49003232350SGuillaume Chatelet   EXPECT_EQ(num.get_biased_exponent(), 0x03FF_u16);
49103232350SGuillaume Chatelet   EXPECT_EQ(num.get_mantissa(), 0x0002000000000000_u64);
49203232350SGuillaume Chatelet   EXPECT_EQ(num.uintval(), 0x3FF2000000000000_u64);
493b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(num).c_str(),
49400bd8e90SSiva Chandra Reddy                "0x3FF2000000000000 = (S: 0, E: 0x03FF, M: 0x0002000000000000)");
49500bd8e90SSiva Chandra Reddy 
496d2361b20Slntue   DoubleBits negnum(-1.125);
49711ec512fSGuillaume Chatelet   EXPECT_TRUE(negnum.is_neg());
49803232350SGuillaume Chatelet   EXPECT_EQ(negnum.get_biased_exponent(), 0x03FF_u16);
49903232350SGuillaume Chatelet   EXPECT_EQ(negnum.get_mantissa(), 0x0002000000000000_u64);
50003232350SGuillaume Chatelet   EXPECT_EQ(negnum.uintval(), 0xBFF2000000000000_u64);
501b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(),
50200bd8e90SSiva Chandra Reddy                "0xBFF2000000000000 = (S: 1, E: 0x03FF, M: 0x0002000000000000)");
50379a2e2b9SNishant Mittal 
504ace383dfSGuillaume Chatelet   DoubleBits quiet_nan = DoubleBits::quiet_nan();
50579a2e2b9SNishant Mittal   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
50600bd8e90SSiva Chandra Reddy }
50700bd8e90SSiva Chandra Reddy 
508ded08015SSirui Mu #ifdef LIBC_TYPES_LONG_DOUBLE_IS_X86_FLOAT80
50900bd8e90SSiva Chandra Reddy TEST(LlvmLibcFPBitsTest, X86LongDoubleType) {
510d2361b20Slntue   using LongDoubleBits = FPBits<long double>;
5117302c8dbSNick Desaulniers   using Rep = FPRep<FPType::X86_Binary80>;
512d2361b20Slntue 
5136b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(LongDoubleBits::inf(Sign::POS)).c_str(),
51437458f66STue Ly                "(+Infinity)");
5156b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(LongDoubleBits::inf(Sign::NEG)).c_str(),
51637458f66STue Ly                "(-Infinity)");
517ace383dfSGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(LongDoubleBits::signaling_nan()).c_str(),
51800bd8e90SSiva Chandra Reddy                "(NaN)");
51900bd8e90SSiva Chandra Reddy 
520d2361b20Slntue   LongDoubleBits zero(0.0l);
52111ec512fSGuillaume Chatelet   EXPECT_TRUE(zero.is_pos());
52203232350SGuillaume Chatelet   EXPECT_EQ(zero.get_biased_exponent(), 0_u16);
5237302c8dbSNick Desaulniers   EXPECT_EQ(zero.get_mantissa(), LongDoubleBits::StorageType(Rep::zero()));
5247302c8dbSNick Desaulniers   EXPECT_EQ(zero.uintval(), LongDoubleBits::StorageType(Rep::zero()));
5257302c8dbSNick Desaulniers #if __SIZEOF_LONG_DOUBLE__ == 16
52600bd8e90SSiva Chandra Reddy   EXPECT_STREQ(
527b6bc9d72SGuillaume Chatelet       LIBC_NAMESPACE::str(zero).c_str(),
52800bd8e90SSiva Chandra Reddy       "0x00000000000000000000000000000000 = "
52900bd8e90SSiva Chandra Reddy       "(S: 0, E: 0x0000, I: 0, M: 0x00000000000000000000000000000000)");
5307302c8dbSNick Desaulniers #elif __SIZEOF_LONG_DOUBLE__ == 12
5317302c8dbSNick Desaulniers   EXPECT_STREQ(LIBC_NAMESPACE::str(zero).c_str(),
5327302c8dbSNick Desaulniers                "0x000000000000000000000000 = "
5337302c8dbSNick Desaulniers                "(S: 0, E: 0x0000, I: 0, M: 0x000000000000000000000000)");
5347302c8dbSNick Desaulniers #else
5357302c8dbSNick Desaulniers #error "unhandled long double type"
5367302c8dbSNick Desaulniers #endif
53700bd8e90SSiva Chandra Reddy 
538d2361b20Slntue   LongDoubleBits negzero(-0.0l);
53911ec512fSGuillaume Chatelet   EXPECT_TRUE(negzero.is_neg());
54003232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_biased_exponent(), 0_u16);
5417302c8dbSNick Desaulniers   EXPECT_EQ(negzero.get_mantissa(), LongDoubleBits::StorageType(Rep::zero()));
5427302c8dbSNick Desaulniers #if __SIZEOF_LONG_DOUBLE__ == 16
543a80a01fcSGuillaume Chatelet   EXPECT_EQ(negzero.uintval(), 0x8000'00000000'00000000_u128);
54400bd8e90SSiva Chandra Reddy   EXPECT_STREQ(
545b6bc9d72SGuillaume Chatelet       LIBC_NAMESPACE::str(negzero).c_str(),
54600bd8e90SSiva Chandra Reddy       "0x00000000000080000000000000000000 = "
54700bd8e90SSiva Chandra Reddy       "(S: 1, E: 0x0000, I: 0, M: 0x00000000000000000000000000000000)");
5487302c8dbSNick Desaulniers #elif __SIZEOF_LONG_DOUBLE__ == 12
5497302c8dbSNick Desaulniers   EXPECT_EQ(negzero.uintval(), 0x8000'00000000'00000000_u96);
5507302c8dbSNick Desaulniers   EXPECT_STREQ(LIBC_NAMESPACE::str(negzero).c_str(),
5517302c8dbSNick Desaulniers                "0x000080000000000000000000 = "
5527302c8dbSNick Desaulniers                "(S: 1, E: 0x0000, I: 0, M: 0x000000000000000000000000)");
5537302c8dbSNick Desaulniers #else
5547302c8dbSNick Desaulniers #error "unhandled long double type"
5557302c8dbSNick Desaulniers #endif
55600bd8e90SSiva Chandra Reddy 
557d2361b20Slntue   LongDoubleBits one(1.0l);
55811ec512fSGuillaume Chatelet   EXPECT_TRUE(one.is_pos());
55903232350SGuillaume Chatelet   EXPECT_EQ(one.get_biased_exponent(), 0x3FFF_u16);
5607302c8dbSNick Desaulniers   EXPECT_EQ(one.get_mantissa(), LongDoubleBits::StorageType(Rep::zero()));
5617302c8dbSNick Desaulniers #if __SIZEOF_LONG_DOUBLE__ == 16
562a80a01fcSGuillaume Chatelet   EXPECT_EQ(one.uintval(), 0x3FFF'80000000'00000000_u128);
56300bd8e90SSiva Chandra Reddy   EXPECT_STREQ(
564b6bc9d72SGuillaume Chatelet       LIBC_NAMESPACE::str(one).c_str(),
56500bd8e90SSiva Chandra Reddy       "0x0000000000003FFF8000000000000000 = "
56600bd8e90SSiva Chandra Reddy       "(S: 0, E: 0x3FFF, I: 1, M: 0x00000000000000000000000000000000)");
5677302c8dbSNick Desaulniers #elif __SIZEOF_LONG_DOUBLE__ == 12
5687302c8dbSNick Desaulniers   EXPECT_EQ(one.uintval(), 0x3FFF'80000000'00000000_u96);
5697302c8dbSNick Desaulniers   EXPECT_STREQ(LIBC_NAMESPACE::str(one).c_str(),
5707302c8dbSNick Desaulniers                "0x00003FFF8000000000000000 = "
5717302c8dbSNick Desaulniers                "(S: 0, E: 0x3FFF, I: 1, M: 0x000000000000000000000000)");
5727302c8dbSNick Desaulniers #else
5737302c8dbSNick Desaulniers #error "unhandled long double type"
5747302c8dbSNick Desaulniers #endif
57500bd8e90SSiva Chandra Reddy 
576d2361b20Slntue   LongDoubleBits negone(-1.0l);
57711ec512fSGuillaume Chatelet   EXPECT_TRUE(negone.is_neg());
57803232350SGuillaume Chatelet   EXPECT_EQ(negone.get_biased_exponent(), 0x3FFF_u16);
5797302c8dbSNick Desaulniers   EXPECT_EQ(negone.get_mantissa(), LongDoubleBits::StorageType(Rep::zero()));
5807302c8dbSNick Desaulniers #if __SIZEOF_LONG_DOUBLE__ == 16
581a80a01fcSGuillaume Chatelet   EXPECT_EQ(negone.uintval(), 0xBFFF'80000000'00000000_u128);
58200bd8e90SSiva Chandra Reddy   EXPECT_STREQ(
583b6bc9d72SGuillaume Chatelet       LIBC_NAMESPACE::str(negone).c_str(),
58400bd8e90SSiva Chandra Reddy       "0x000000000000BFFF8000000000000000 = "
58500bd8e90SSiva Chandra Reddy       "(S: 1, E: 0x3FFF, I: 1, M: 0x00000000000000000000000000000000)");
5867302c8dbSNick Desaulniers #elif __SIZEOF_LONG_DOUBLE__ == 12
5877302c8dbSNick Desaulniers   EXPECT_EQ(negone.uintval(), 0xBFFF'80000000'00000000_u96);
5887302c8dbSNick Desaulniers   EXPECT_STREQ(LIBC_NAMESPACE::str(negone).c_str(),
5897302c8dbSNick Desaulniers                "0x0000BFFF8000000000000000 = "
5907302c8dbSNick Desaulniers                "(S: 1, E: 0x3FFF, I: 1, M: 0x000000000000000000000000)");
5917302c8dbSNick Desaulniers #else
5927302c8dbSNick Desaulniers #error "unhandled long double type"
5937302c8dbSNick Desaulniers #endif
59400bd8e90SSiva Chandra Reddy 
595d2361b20Slntue   LongDoubleBits num(1.125l);
59611ec512fSGuillaume Chatelet   EXPECT_TRUE(num.is_pos());
59703232350SGuillaume Chatelet   EXPECT_EQ(num.get_biased_exponent(), 0x3FFF_u16);
5987302c8dbSNick Desaulniers #if __SIZEOF_LONG_DOUBLE__ == 16
599a80a01fcSGuillaume Chatelet   EXPECT_EQ(num.get_mantissa(), 0x10000000'00000000_u128);
600a80a01fcSGuillaume Chatelet   EXPECT_EQ(num.uintval(), 0x3FFF'90000000'00000000_u128);
60100bd8e90SSiva Chandra Reddy   EXPECT_STREQ(
602b6bc9d72SGuillaume Chatelet       LIBC_NAMESPACE::str(num).c_str(),
60300bd8e90SSiva Chandra Reddy       "0x0000000000003FFF9000000000000000 = "
60400bd8e90SSiva Chandra Reddy       "(S: 0, E: 0x3FFF, I: 1, M: 0x00000000000000001000000000000000)");
6057302c8dbSNick Desaulniers #elif __SIZEOF_LONG_DOUBLE__ == 12
6067302c8dbSNick Desaulniers   EXPECT_EQ(num.get_mantissa(), 0x10000000'00000000_u96);
6077302c8dbSNick Desaulniers   EXPECT_EQ(num.uintval(), 0x3FFF'90000000'00000000_u96);
6087302c8dbSNick Desaulniers   EXPECT_STREQ(LIBC_NAMESPACE::str(num).c_str(),
6097302c8dbSNick Desaulniers                "0x00003FFF9000000000000000 = "
6107302c8dbSNick Desaulniers                "(S: 0, E: 0x3FFF, I: 1, M: 0x000000001000000000000000)");
6117302c8dbSNick Desaulniers #else
6127302c8dbSNick Desaulniers #error "unhandled long double type"
6137302c8dbSNick Desaulniers #endif
61400bd8e90SSiva Chandra Reddy 
615d2361b20Slntue   LongDoubleBits negnum(-1.125l);
61611ec512fSGuillaume Chatelet   EXPECT_TRUE(negnum.is_neg());
61703232350SGuillaume Chatelet   EXPECT_EQ(negnum.get_biased_exponent(), 0x3FFF_u16);
6187302c8dbSNick Desaulniers #if __SIZEOF_LONG_DOUBLE__ == 16
619a80a01fcSGuillaume Chatelet   EXPECT_EQ(negnum.get_mantissa(), 0x10000000'00000000_u128);
620a80a01fcSGuillaume Chatelet   EXPECT_EQ(negnum.uintval(), 0xBFFF'90000000'00000000_u128);
62100bd8e90SSiva Chandra Reddy   EXPECT_STREQ(
622b6bc9d72SGuillaume Chatelet       LIBC_NAMESPACE::str(negnum).c_str(),
62300bd8e90SSiva Chandra Reddy       "0x000000000000BFFF9000000000000000 = "
62400bd8e90SSiva Chandra Reddy       "(S: 1, E: 0x3FFF, I: 1, M: 0x00000000000000001000000000000000)");
6257302c8dbSNick Desaulniers #elif __SIZEOF_LONG_DOUBLE__ == 12
6267302c8dbSNick Desaulniers   EXPECT_EQ(negnum.get_mantissa(), 0x10000000'00000000_u96);
6277302c8dbSNick Desaulniers   EXPECT_EQ(negnum.uintval(), 0xBFFF'90000000'00000000_u96);
6287302c8dbSNick Desaulniers   EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(),
6297302c8dbSNick Desaulniers                "0x0000BFFF9000000000000000 = "
6307302c8dbSNick Desaulniers                "(S: 1, E: 0x3FFF, I: 1, M: 0x000000001000000000000000)");
6317302c8dbSNick Desaulniers #else
6327302c8dbSNick Desaulniers #error "unhandled long double type"
6337302c8dbSNick Desaulniers #endif
63479a2e2b9SNishant Mittal 
635ace383dfSGuillaume Chatelet   LongDoubleBits quiet_nan = LongDoubleBits::quiet_nan();
63679a2e2b9SNishant Mittal   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
63700bd8e90SSiva Chandra Reddy }
63800bd8e90SSiva Chandra Reddy #else
63900bd8e90SSiva Chandra Reddy TEST(LlvmLibcFPBitsTest, LongDoubleType) {
640f7d4236aSGuillaume Chatelet #if defined(LIBC_TYPES_LONG_DOUBLE_IS_FLOAT64)
64100bd8e90SSiva Chandra Reddy   return; // The tests for the "double" type cover for this case.
6422ac91712SJoseph Huber #else
643d2361b20Slntue   using LongDoubleBits = FPBits<long double>;
644d2361b20Slntue 
6456b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(LongDoubleBits::inf(Sign::POS)).c_str(),
64637458f66STue Ly                "(+Infinity)");
6476b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(LongDoubleBits::inf(Sign::NEG)).c_str(),
64837458f66STue Ly                "(-Infinity)");
649ace383dfSGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(LongDoubleBits::signaling_nan()).c_str(),
65000bd8e90SSiva Chandra Reddy                "(NaN)");
65100bd8e90SSiva Chandra Reddy 
652d2361b20Slntue   LongDoubleBits zero(0.0l);
65311ec512fSGuillaume Chatelet   EXPECT_TRUE(zero.is_pos());
65403232350SGuillaume Chatelet   EXPECT_EQ(zero.get_biased_exponent(), 0_u16);
65503232350SGuillaume Chatelet   EXPECT_EQ(zero.get_mantissa(), 0_u128);
65603232350SGuillaume Chatelet   EXPECT_EQ(zero.uintval(), 0_u128);
657b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(zero).c_str(),
65800bd8e90SSiva Chandra Reddy                "0x00000000000000000000000000000000 = "
65900bd8e90SSiva Chandra Reddy                "(S: 0, E: 0x0000, M: 0x00000000000000000000000000000000)");
66000bd8e90SSiva Chandra Reddy 
661d2361b20Slntue   LongDoubleBits negzero(-0.0l);
66211ec512fSGuillaume Chatelet   EXPECT_TRUE(negzero.is_neg());
66303232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_biased_exponent(), 0_u16);
66403232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_mantissa(), 0_u128);
665a80a01fcSGuillaume Chatelet   EXPECT_EQ(negzero.uintval(), 0x80000000'00000000'00000000'00000000_u128);
666b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negzero).c_str(),
66700bd8e90SSiva Chandra Reddy                "0x80000000000000000000000000000000 = "
66800bd8e90SSiva Chandra Reddy                "(S: 1, E: 0x0000, M: 0x00000000000000000000000000000000)");
66900bd8e90SSiva Chandra Reddy 
670d2361b20Slntue   LongDoubleBits one(1.0l);
67111ec512fSGuillaume Chatelet   EXPECT_TRUE(one.is_pos());
67203232350SGuillaume Chatelet   EXPECT_EQ(one.get_biased_exponent(), 0x3FFF_u16);
67303232350SGuillaume Chatelet   EXPECT_EQ(one.get_mantissa(), 0_u128);
674a80a01fcSGuillaume Chatelet   EXPECT_EQ(one.uintval(), 0x3FFF0000'00000000'00000000'00000000_u128);
675b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(one).c_str(),
67600bd8e90SSiva Chandra Reddy                "0x3FFF0000000000000000000000000000 = "
67700bd8e90SSiva Chandra Reddy                "(S: 0, E: 0x3FFF, M: 0x00000000000000000000000000000000)");
67800bd8e90SSiva Chandra Reddy 
679d2361b20Slntue   LongDoubleBits negone(-1.0l);
68011ec512fSGuillaume Chatelet   EXPECT_TRUE(negone.is_neg());
68103232350SGuillaume Chatelet   EXPECT_EQ(negone.get_biased_exponent(), 0x3FFF_u16);
68203232350SGuillaume Chatelet   EXPECT_EQ(negone.get_mantissa(), 0_u128);
683a80a01fcSGuillaume Chatelet   EXPECT_EQ(negone.uintval(), 0xBFFF0000'00000000'00000000'00000000_u128);
684b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negone).c_str(),
68500bd8e90SSiva Chandra Reddy                "0xBFFF0000000000000000000000000000 = "
68600bd8e90SSiva Chandra Reddy                "(S: 1, E: 0x3FFF, M: 0x00000000000000000000000000000000)");
68700bd8e90SSiva Chandra Reddy 
688d2361b20Slntue   LongDoubleBits num(1.125l);
68911ec512fSGuillaume Chatelet   EXPECT_TRUE(num.is_pos());
69003232350SGuillaume Chatelet   EXPECT_EQ(num.get_biased_exponent(), 0x3FFF_u16);
691a80a01fcSGuillaume Chatelet   EXPECT_EQ(num.get_mantissa(), 0x2000'00000000'00000000'00000000_u128);
692a80a01fcSGuillaume Chatelet   EXPECT_EQ(num.uintval(), 0x3FFF2000'00000000'00000000'00000000_u128);
693b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(num).c_str(),
69400bd8e90SSiva Chandra Reddy                "0x3FFF2000000000000000000000000000 = "
69500bd8e90SSiva Chandra Reddy                "(S: 0, E: 0x3FFF, M: 0x00002000000000000000000000000000)");
69600bd8e90SSiva Chandra Reddy 
697d2361b20Slntue   LongDoubleBits negnum(-1.125l);
69811ec512fSGuillaume Chatelet   EXPECT_TRUE(negnum.is_neg());
69903232350SGuillaume Chatelet   EXPECT_EQ(negnum.get_biased_exponent(), 0x3FFF_u16);
700a80a01fcSGuillaume Chatelet   EXPECT_EQ(negnum.get_mantissa(), 0x2000'00000000'00000000'00000000_u128);
701a80a01fcSGuillaume Chatelet   EXPECT_EQ(negnum.uintval(), 0xBFFF2000'00000000'00000000'00000000_u128);
702b6bc9d72SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(),
70300bd8e90SSiva Chandra Reddy                "0xBFFF2000000000000000000000000000 = "
70400bd8e90SSiva Chandra Reddy                "(S: 1, E: 0x3FFF, M: 0x00002000000000000000000000000000)");
70579a2e2b9SNishant Mittal 
706ace383dfSGuillaume Chatelet   LongDoubleBits quiet_nan = LongDoubleBits::quiet_nan();
70779a2e2b9SNishant Mittal   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
7082ac91712SJoseph Huber #endif
70900bd8e90SSiva Chandra Reddy }
71000bd8e90SSiva Chandra Reddy #endif
7113f906f51Slntue 
71275fb825bSGuillaume Chatelet #if defined(LIBC_TYPES_HAS_FLOAT128)
7133f906f51Slntue TEST(LlvmLibcFPBitsTest, Float128Type) {
7143f906f51Slntue   using Float128Bits = FPBits<float128>;
7153f906f51Slntue 
7166b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(Float128Bits::inf(Sign::POS)).c_str(),
7173f906f51Slntue                "(+Infinity)");
7186b02d2f8SGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(Float128Bits::inf(Sign::NEG)).c_str(),
7193f906f51Slntue                "(-Infinity)");
720ace383dfSGuillaume Chatelet   EXPECT_STREQ(LIBC_NAMESPACE::str(Float128Bits::signaling_nan()).c_str(),
721ace383dfSGuillaume Chatelet                "(NaN)");
7223f906f51Slntue 
7236b02d2f8SGuillaume Chatelet   Float128Bits zero = Float128Bits::zero(Sign::POS);
72411ec512fSGuillaume Chatelet   EXPECT_TRUE(zero.is_pos());
72503232350SGuillaume Chatelet   EXPECT_EQ(zero.get_biased_exponent(), 0_u16);
72603232350SGuillaume Chatelet   EXPECT_EQ(zero.get_mantissa(), 0_u128);
72703232350SGuillaume Chatelet   EXPECT_EQ(zero.uintval(), 0_u128);
7283f906f51Slntue   EXPECT_STREQ(LIBC_NAMESPACE::str(zero).c_str(),
7293f906f51Slntue                "0x00000000000000000000000000000000 = "
7303f906f51Slntue                "(S: 0, E: 0x0000, M: 0x00000000000000000000000000000000)");
7313f906f51Slntue 
7326b02d2f8SGuillaume Chatelet   Float128Bits negzero = Float128Bits::zero(Sign::NEG);
73311ec512fSGuillaume Chatelet   EXPECT_TRUE(negzero.is_neg());
73403232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_biased_exponent(), 0_u16);
73503232350SGuillaume Chatelet   EXPECT_EQ(negzero.get_mantissa(), 0_u128);
736a80a01fcSGuillaume Chatelet   EXPECT_EQ(negzero.uintval(), 0x80000000'00000000'00000000'00000000_u128);
7373f906f51Slntue   EXPECT_STREQ(LIBC_NAMESPACE::str(negzero).c_str(),
7383f906f51Slntue                "0x80000000000000000000000000000000 = "
7393f906f51Slntue                "(S: 1, E: 0x0000, M: 0x00000000000000000000000000000000)");
7403f906f51Slntue 
7413f906f51Slntue   Float128Bits one(float128(1.0));
74211ec512fSGuillaume Chatelet   EXPECT_TRUE(one.is_pos());
74303232350SGuillaume Chatelet   EXPECT_EQ(one.get_biased_exponent(), 0x3FFF_u16);
74403232350SGuillaume Chatelet   EXPECT_EQ(one.get_mantissa(), 0_u128);
745a80a01fcSGuillaume Chatelet   EXPECT_EQ(one.uintval(), 0x3FFF0000'00000000'00000000'00000000_u128);
7463f906f51Slntue   EXPECT_STREQ(LIBC_NAMESPACE::str(one).c_str(),
7473f906f51Slntue                "0x3FFF0000000000000000000000000000 = "
7483f906f51Slntue                "(S: 0, E: 0x3FFF, M: 0x00000000000000000000000000000000)");
7493f906f51Slntue 
7503f906f51Slntue   Float128Bits negone(float128(-1.0));
75111ec512fSGuillaume Chatelet   EXPECT_TRUE(negone.is_neg());
75203232350SGuillaume Chatelet   EXPECT_EQ(negone.get_biased_exponent(), 0x3FFF_u16);
75303232350SGuillaume Chatelet   EXPECT_EQ(negone.get_mantissa(), 0_u128);
754a80a01fcSGuillaume Chatelet   EXPECT_EQ(negone.uintval(), 0xBFFF0000'00000000'00000000'00000000_u128);
7553f906f51Slntue   EXPECT_STREQ(LIBC_NAMESPACE::str(negone).c_str(),
7563f906f51Slntue                "0xBFFF0000000000000000000000000000 = "
7573f906f51Slntue                "(S: 1, E: 0x3FFF, M: 0x00000000000000000000000000000000)");
7583f906f51Slntue 
7593f906f51Slntue   Float128Bits num(float128(1.125));
76011ec512fSGuillaume Chatelet   EXPECT_TRUE(num.is_pos());
76103232350SGuillaume Chatelet   EXPECT_EQ(num.get_biased_exponent(), 0x3FFF_u16);
762a80a01fcSGuillaume Chatelet   EXPECT_EQ(num.get_mantissa(), 0x2000'00000000'00000000'00000000_u128);
763a80a01fcSGuillaume Chatelet   EXPECT_EQ(num.uintval(), 0x3FFF2000'00000000'00000000'00000000_u128);
7643f906f51Slntue   EXPECT_STREQ(LIBC_NAMESPACE::str(num).c_str(),
7653f906f51Slntue                "0x3FFF2000000000000000000000000000 = "
7663f906f51Slntue                "(S: 0, E: 0x3FFF, M: 0x00002000000000000000000000000000)");
7673f906f51Slntue 
7683f906f51Slntue   Float128Bits negnum(float128(-1.125));
76911ec512fSGuillaume Chatelet   EXPECT_TRUE(negnum.is_neg());
77003232350SGuillaume Chatelet   EXPECT_EQ(negnum.get_biased_exponent(), 0x3FFF_u16);
771a80a01fcSGuillaume Chatelet   EXPECT_EQ(negnum.get_mantissa(), 0x2000'00000000'00000000'00000000_u128);
772a80a01fcSGuillaume Chatelet   EXPECT_EQ(negnum.uintval(), 0xBFFF2000'00000000'00000000'00000000_u128);
7733f906f51Slntue   EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(),
7743f906f51Slntue                "0xBFFF2000000000000000000000000000 = "
7753f906f51Slntue                "(S: 1, E: 0x3FFF, M: 0x00002000000000000000000000000000)");
77679a2e2b9SNishant Mittal 
777ace383dfSGuillaume Chatelet   Float128Bits quiet_nan = Float128Bits::quiet_nan();
77879a2e2b9SNishant Mittal   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
7793f906f51Slntue }
78075fb825bSGuillaume Chatelet #endif // LIBC_TYPES_HAS_FLOAT128
781