Expand Up
@@ -13,55 +13,56 @@
using LIBC_NAMESPACE::fputil::FPBits;
TEST (LlvmLibcFPBitsTest, FloatType) {
EXPECT_STREQ (LIBC_NAMESPACE::str (FPBits<float >::inf ()).c_str (),
using FloatBits = FPBits<float >;
EXPECT_STREQ (LIBC_NAMESPACE::str (FloatBits (FloatBits::inf ())).c_str (),
" (+Infinity)" );
EXPECT_STREQ (LIBC_NAMESPACE::str (FPBits< float > ::neg_inf ()).c_str (),
EXPECT_STREQ (LIBC_NAMESPACE::str (FloatBits ( FloatBits ::neg_inf () )).c_str (),
" (-Infinity)" );
EXPECT_STREQ (
LIBC_NAMESPACE::str (FPBits<float >(FPBits<float >::build_nan (1 ))).c_str (),
" (NaN)" );
EXPECT_STREQ (LIBC_NAMESPACE::str (FloatBits (FloatBits::build_nan (1 ))).c_str (),
" (NaN)" );
FPBits< float > zero (0 .0f );
FloatBits zero (0 .0f );
EXPECT_EQ (zero.get_sign (), false );
EXPECT_EQ (zero.get_unbiased_exponent (), static_cast <uint16_t >(0 ));
EXPECT_EQ (zero.get_mantissa (), static_cast <uint32_t >(0 ));
EXPECT_EQ (zero.uintval (), static_cast <uint32_t >(0x00000000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (zero).c_str (),
" 0x00000000 = (S: 0, E: 0x0000, M: 0x00000000)" );
FPBits< float > negzero (-0 .0f );
FloatBits negzero (-0 .0f );
EXPECT_EQ (negzero.get_sign (), true );
EXPECT_EQ (negzero.get_unbiased_exponent (), static_cast <uint16_t >(0 ));
EXPECT_EQ (negzero.get_mantissa (), static_cast <uint32_t >(0 ));
EXPECT_EQ (negzero.uintval (), static_cast <uint32_t >(0x80000000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (negzero).c_str (),
" 0x80000000 = (S: 1, E: 0x0000, M: 0x00000000)" );
FPBits< float > one (1 .0f );
FloatBits one (1 .0f );
EXPECT_EQ (one.get_sign (), false );
EXPECT_EQ (one.get_unbiased_exponent (), static_cast <uint16_t >(0x7F ));
EXPECT_EQ (one.get_mantissa (), static_cast <uint32_t >(0 ));
EXPECT_EQ (one.uintval (), static_cast <uint32_t >(0x3F800000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (one).c_str (),
" 0x3F800000 = (S: 0, E: 0x007F, M: 0x00000000)" );
FPBits< float > negone (-1 .0f );
FloatBits negone (-1 .0f );
EXPECT_EQ (negone.get_sign (), true );
EXPECT_EQ (negone.get_unbiased_exponent (), static_cast <uint16_t >(0x7F ));
EXPECT_EQ (negone.get_mantissa (), static_cast <uint32_t >(0 ));
EXPECT_EQ (negone.uintval (), static_cast <uint32_t >(0xBF800000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (negone).c_str (),
" 0xBF800000 = (S: 1, E: 0x007F, M: 0x00000000)" );
FPBits< float > num (1 .125f );
FloatBits num (1 .125f );
EXPECT_EQ (num.get_sign (), false );
EXPECT_EQ (num.get_unbiased_exponent (), static_cast <uint16_t >(0x7F ));
EXPECT_EQ (num.get_mantissa (), static_cast <uint32_t >(0x00100000 ));
EXPECT_EQ (num.uintval (), static_cast <uint32_t >(0x3F900000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (num).c_str (),
" 0x3F900000 = (S: 0, E: 0x007F, M: 0x00100000)" );
FPBits< float > negnum (-1 .125f );
FloatBits negnum (-1 .125f );
EXPECT_EQ (negnum.get_sign (), true );
EXPECT_EQ (negnum.get_unbiased_exponent (), static_cast <uint16_t >(0x7F ));
EXPECT_EQ (negnum.get_mantissa (), static_cast <uint32_t >(0x00100000 ));
Expand All
@@ -71,55 +72,57 @@ TEST(LlvmLibcFPBitsTest, FloatType) {
}
TEST (LlvmLibcFPBitsTest, DoubleType) {
EXPECT_STREQ (LIBC_NAMESPACE::str (FPBits<double >::inf ()).c_str (),
using DoubleBits = FPBits<double >;
EXPECT_STREQ (LIBC_NAMESPACE::str (DoubleBits (DoubleBits::inf ())).c_str (),
" (+Infinity)" );
EXPECT_STREQ (LIBC_NAMESPACE::str (FPBits< double > ::neg_inf ()).c_str (),
EXPECT_STREQ (LIBC_NAMESPACE::str (DoubleBits ( DoubleBits ::neg_inf () )).c_str (),
" (-Infinity)" );
EXPECT_STREQ (
LIBC_NAMESPACE::str (FPBits< double >(FPBits< double > ::build_nan (1 ))).c_str (),
LIBC_NAMESPACE::str (DoubleBits ( DoubleBits ::build_nan (1 ))).c_str (),
" (NaN)" );
FPBits< double > zero (0.0 );
DoubleBits zero (0.0 );
EXPECT_EQ (zero.get_sign (), false );
EXPECT_EQ (zero.get_unbiased_exponent (), static_cast <uint16_t >(0x0000 ));
EXPECT_EQ (zero.get_mantissa (), static_cast <uint64_t >(0x0000000000000000 ));
EXPECT_EQ (zero.uintval (), static_cast <uint64_t >(0x0000000000000000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (zero).c_str (),
" 0x0000000000000000 = (S: 0, E: 0x0000, M: 0x0000000000000000)" );
FPBits< double > negzero (-0.0 );
DoubleBits negzero (-0.0 );
EXPECT_EQ (negzero.get_sign (), true );
EXPECT_EQ (negzero.get_unbiased_exponent (), static_cast <uint16_t >(0x0000 ));
EXPECT_EQ (negzero.get_mantissa (), static_cast <uint64_t >(0x0000000000000000 ));
EXPECT_EQ (negzero.uintval (), static_cast <uint64_t >(0x8000000000000000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (negzero).c_str (),
" 0x8000000000000000 = (S: 1, E: 0x0000, M: 0x0000000000000000)" );
FPBits< double > one (1.0 );
DoubleBits one (1.0 );
EXPECT_EQ (one.get_sign (), false );
EXPECT_EQ (one.get_unbiased_exponent (), static_cast <uint16_t >(0x03FF ));
EXPECT_EQ (one.get_mantissa (), static_cast <uint64_t >(0x0000000000000000 ));
EXPECT_EQ (one.uintval (), static_cast <uint64_t >(0x3FF0000000000000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (one).c_str (),
" 0x3FF0000000000000 = (S: 0, E: 0x03FF, M: 0x0000000000000000)" );
FPBits< double > negone (-1.0 );
DoubleBits negone (-1.0 );
EXPECT_EQ (negone.get_sign (), true );
EXPECT_EQ (negone.get_unbiased_exponent (), static_cast <uint16_t >(0x03FF ));
EXPECT_EQ (negone.get_mantissa (), static_cast <uint64_t >(0x0000000000000000 ));
EXPECT_EQ (negone.uintval (), static_cast <uint64_t >(0xBFF0000000000000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (negone).c_str (),
" 0xBFF0000000000000 = (S: 1, E: 0x03FF, M: 0x0000000000000000)" );
FPBits< double > num (1.125 );
DoubleBits num (1.125 );
EXPECT_EQ (num.get_sign (), false );
EXPECT_EQ (num.get_unbiased_exponent (), static_cast <uint16_t >(0x03FF ));
EXPECT_EQ (num.get_mantissa (), static_cast <uint64_t >(0x0002000000000000 ));
EXPECT_EQ (num.uintval (), static_cast <uint64_t >(0x3FF2000000000000 ));
EXPECT_STREQ (LIBC_NAMESPACE::str (num).c_str (),
" 0x3FF2000000000000 = (S: 0, E: 0x03FF, M: 0x0002000000000000)" );
FPBits< double > negnum (-1.125 );
DoubleBits negnum (-1.125 );
EXPECT_EQ (negnum.get_sign (), true );
EXPECT_EQ (negnum.get_unbiased_exponent (), static_cast <uint16_t >(0x03FF ));
EXPECT_EQ (negnum.get_mantissa (), static_cast <uint64_t >(0x0002000000000000 ));
Expand All
@@ -130,19 +133,22 @@ TEST(LlvmLibcFPBitsTest, DoubleType) {
#ifdef LIBC_TARGET_ARCH_IS_X86
TEST (LlvmLibcFPBitsTest, X86LongDoubleType) {
using LongDoubleBits = FPBits<long double >;
if constexpr (sizeof (long double ) == sizeof (double ))
return ; // The tests for the "double" type cover for this case.
EXPECT_STREQ (LIBC_NAMESPACE::str (FPBits<long double >::inf ()).c_str (),
" (+Infinity)" );
EXPECT_STREQ (LIBC_NAMESPACE::str (FPBits<long double >::neg_inf ()).c_str (),
" (-Infinity)" );
EXPECT_STREQ (LIBC_NAMESPACE::str (
FPBits<long double >(FPBits<long double >::build_nan (1 )))
.c_str (),
" (NaN)" );
EXPECT_STREQ (
LIBC_NAMESPACE::str (LongDoubleBits (LongDoubleBits::inf ())).c_str (),
" (+Infinity)" );
EXPECT_STREQ (
LIBC_NAMESPACE::str (LongDoubleBits (LongDoubleBits::neg_inf ())).c_str (),
" (-Infinity)" );
EXPECT_STREQ (
LIBC_NAMESPACE::str (LongDoubleBits (LongDoubleBits::build_nan (1 ))).c_str (),
" (NaN)" );
FPBits< long double > zero (0 .0l );
LongDoubleBits zero (0 .0l );
EXPECT_EQ (zero.get_sign (), false );
EXPECT_EQ (zero.get_unbiased_exponent (), static_cast <uint16_t >(0x0000 ));
EXPECT_EQ (zero.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
Expand All
@@ -153,7 +159,7 @@ TEST(LlvmLibcFPBitsTest, X86LongDoubleType) {
" 0x00000000000000000000000000000000 = "
" (S: 0, E: 0x0000, I: 0, M: 0x00000000000000000000000000000000)" );
FPBits< long double > negzero (-0 .0l );
LongDoubleBits negzero (-0 .0l );
EXPECT_EQ (negzero.get_sign (), true );
EXPECT_EQ (negzero.get_unbiased_exponent (), static_cast <uint16_t >(0x0000 ));
EXPECT_EQ (negzero.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
Expand All
@@ -164,7 +170,7 @@ TEST(LlvmLibcFPBitsTest, X86LongDoubleType) {
" 0x00000000000080000000000000000000 = "
" (S: 1, E: 0x0000, I: 0, M: 0x00000000000000000000000000000000)" );
FPBits< long double > one (1 .0l );
LongDoubleBits one (1 .0l );
EXPECT_EQ (one.get_sign (), false );
EXPECT_EQ (one.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
EXPECT_EQ (one.get_mantissa (), static_cast <UInt128>(0x0000000000000000 ) << 64 );
Expand All
@@ -174,7 +180,7 @@ TEST(LlvmLibcFPBitsTest, X86LongDoubleType) {
" 0x0000000000003FFF8000000000000000 = "
" (S: 0, E: 0x3FFF, I: 1, M: 0x00000000000000000000000000000000)" );
FPBits< long double > negone (-1 .0l );
LongDoubleBits negone (-1 .0l );
EXPECT_EQ (negone.get_sign (), true );
EXPECT_EQ (negone.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
EXPECT_EQ (negone.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
Expand All
@@ -185,7 +191,7 @@ TEST(LlvmLibcFPBitsTest, X86LongDoubleType) {
" 0x000000000000BFFF8000000000000000 = "
" (S: 1, E: 0x3FFF, I: 1, M: 0x00000000000000000000000000000000)" );
FPBits< long double > num (1 .125l );
LongDoubleBits num (1 .125l );
EXPECT_EQ (num.get_sign (), false );
EXPECT_EQ (num.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
EXPECT_EQ (num.get_mantissa (), static_cast <UInt128>(0x1 ) << 60 );
Expand All
@@ -195,7 +201,7 @@ TEST(LlvmLibcFPBitsTest, X86LongDoubleType) {
" 0x0000000000003FFF9000000000000000 = "
" (S: 0, E: 0x3FFF, I: 1, M: 0x00000000000000001000000000000000)" );
FPBits< long double > negnum (-1 .125l );
LongDoubleBits negnum (-1 .125l );
EXPECT_EQ (negnum.get_sign (), true );
EXPECT_EQ (negnum.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
EXPECT_EQ (negnum.get_mantissa (), static_cast <UInt128>(0x1 ) << 60 );
Expand All
@@ -210,16 +216,19 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) {
#if defined(LONG_DOUBLE_IS_DOUBLE)
return ; // The tests for the "double" type cover for this case.
#else
EXPECT_STREQ (LIBC_NAMESPACE::str (FPBits<long double >::inf ()).c_str (),
" (+Infinity)" );
EXPECT_STREQ (LIBC_NAMESPACE::str (FPBits<long double >::neg_inf ()).c_str (),
" (-Infinity)" );
EXPECT_STREQ (LIBC_NAMESPACE::str (
FPBits<long double >(FPBits<long double >::build_nan (1 )))
.c_str (),
" (NaN)" );
using LongDoubleBits = FPBits<long double >;
EXPECT_STREQ (
LIBC_NAMESPACE::str (LongDoubleBits (LongDoubleBits::inf ())).c_str (),
" (+Infinity)" );
EXPECT_STREQ (
LIBC_NAMESPACE::str (LongDoubleBits (LongDoubleBits::neg_inf ())).c_str (),
" (-Infinity)" );
EXPECT_STREQ (
LIBC_NAMESPACE::str (LongDoubleBits (LongDoubleBits::build_nan (1 ))).c_str (),
" (NaN)" );
FPBits< long double > zero (0 .0l );
LongDoubleBits zero (0 .0l );
EXPECT_EQ (zero.get_sign (), false );
EXPECT_EQ (zero.get_unbiased_exponent (), static_cast <uint16_t >(0x0000 ));
EXPECT_EQ (zero.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
Expand All
@@ -229,7 +238,7 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) {
" 0x00000000000000000000000000000000 = "
" (S: 0, E: 0x0000, M: 0x00000000000000000000000000000000)" );
FPBits< long double > negzero (-0 .0l );
LongDoubleBits negzero (-0 .0l );
EXPECT_EQ (negzero.get_sign (), true );
EXPECT_EQ (negzero.get_unbiased_exponent (), static_cast <uint16_t >(0x0000 ));
EXPECT_EQ (negzero.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
Expand All
@@ -239,7 +248,7 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) {
" 0x80000000000000000000000000000000 = "
" (S: 1, E: 0x0000, M: 0x00000000000000000000000000000000)" );
FPBits< long double > one (1 .0l );
LongDoubleBits one (1 .0l );
EXPECT_EQ (one.get_sign (), false );
EXPECT_EQ (one.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
EXPECT_EQ (one.get_mantissa (), static_cast <UInt128>(0x0000000000000000 ) << 64 );
Expand All
@@ -248,7 +257,7 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) {
" 0x3FFF0000000000000000000000000000 = "
" (S: 0, E: 0x3FFF, M: 0x00000000000000000000000000000000)" );
FPBits< long double > negone (-1 .0l );
LongDoubleBits negone (-1 .0l );
EXPECT_EQ (negone.get_sign (), true );
EXPECT_EQ (negone.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
EXPECT_EQ (negone.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
Expand All
@@ -258,7 +267,7 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) {
" 0xBFFF0000000000000000000000000000 = "
" (S: 1, E: 0x3FFF, M: 0x00000000000000000000000000000000)" );
FPBits< long double > num (1 .125l );
LongDoubleBits num (1 .125l );
EXPECT_EQ (num.get_sign (), false );
EXPECT_EQ (num.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
EXPECT_EQ (num.get_mantissa (), static_cast <UInt128>(0x2 ) << 108 );
Expand All
@@ -267,7 +276,7 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) {
" 0x3FFF2000000000000000000000000000 = "
" (S: 0, E: 0x3FFF, M: 0x00002000000000000000000000000000)" );
FPBits< long double > negnum (-1 .125l );
LongDoubleBits negnum (-1 .125l );
EXPECT_EQ (negnum.get_sign (), true );
EXPECT_EQ (negnum.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
EXPECT_EQ (negnum.get_mantissa (), static_cast <UInt128>(0x2 ) << 108 );
Expand Down