@@ -287,3 +287,75 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) {
287
287
#endif
288
288
}
289
289
#endif
290
+
291
+ #if defined(LIBC_COMPILER_HAS_FLOAT128)
292
+ TEST (LlvmLibcFPBitsTest, Float128Type) {
293
+ using Float128Bits = FPBits<float128>;
294
+
295
+ EXPECT_STREQ (LIBC_NAMESPACE::str (Float128Bits (Float128Bits::inf ())).c_str (),
296
+ " (+Infinity)" );
297
+ EXPECT_STREQ (
298
+ LIBC_NAMESPACE::str (Float128Bits (Float128Bits::neg_inf ())).c_str (),
299
+ " (-Infinity)" );
300
+ EXPECT_STREQ (
301
+ LIBC_NAMESPACE::str (Float128Bits (Float128Bits::build_nan (1 ))).c_str (),
302
+ " (NaN)" );
303
+
304
+ Float128Bits zero (Float128Bits::zero ());
305
+ EXPECT_EQ (zero.get_sign (), false );
306
+ EXPECT_EQ (zero.get_unbiased_exponent (), static_cast <uint16_t >(0x0000 ));
307
+ EXPECT_EQ (zero.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
308
+ << 64 );
309
+ EXPECT_EQ (zero.uintval (), static_cast <UInt128>(0x0000000000000000 ) << 64 );
310
+ EXPECT_STREQ (LIBC_NAMESPACE::str (zero).c_str (),
311
+ " 0x00000000000000000000000000000000 = "
312
+ " (S: 0, E: 0x0000, M: 0x00000000000000000000000000000000)" );
313
+
314
+ Float128Bits negzero (Float128Bits::neg_zero ());
315
+ EXPECT_EQ (negzero.get_sign (), true );
316
+ EXPECT_EQ (negzero.get_unbiased_exponent (), static_cast <uint16_t >(0x0000 ));
317
+ EXPECT_EQ (negzero.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
318
+ << 64 );
319
+ EXPECT_EQ (negzero.uintval (), static_cast <UInt128>(0x1 ) << 127 );
320
+ EXPECT_STREQ (LIBC_NAMESPACE::str (negzero).c_str (),
321
+ " 0x80000000000000000000000000000000 = "
322
+ " (S: 1, E: 0x0000, M: 0x00000000000000000000000000000000)" );
323
+
324
+ Float128Bits one (float128 (1.0 ));
325
+ EXPECT_EQ (one.get_sign (), false );
326
+ EXPECT_EQ (one.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
327
+ EXPECT_EQ (one.get_mantissa (), static_cast <UInt128>(0x0000000000000000 ) << 64 );
328
+ EXPECT_EQ (one.uintval (), static_cast <UInt128>(0x3FFF ) << 112 );
329
+ EXPECT_STREQ (LIBC_NAMESPACE::str (one).c_str (),
330
+ " 0x3FFF0000000000000000000000000000 = "
331
+ " (S: 0, E: 0x3FFF, M: 0x00000000000000000000000000000000)" );
332
+
333
+ Float128Bits negone (float128 (-1.0 ));
334
+ EXPECT_EQ (negone.get_sign (), true );
335
+ EXPECT_EQ (negone.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
336
+ EXPECT_EQ (negone.get_mantissa (), static_cast <UInt128>(0x0000000000000000 )
337
+ << 64 );
338
+ EXPECT_EQ (negone.uintval (), static_cast <UInt128>(0xBFFF ) << 112 );
339
+ EXPECT_STREQ (LIBC_NAMESPACE::str (negone).c_str (),
340
+ " 0xBFFF0000000000000000000000000000 = "
341
+ " (S: 1, E: 0x3FFF, M: 0x00000000000000000000000000000000)" );
342
+
343
+ Float128Bits num (float128 (1.125 ));
344
+ EXPECT_EQ (num.get_sign (), false );
345
+ EXPECT_EQ (num.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
346
+ EXPECT_EQ (num.get_mantissa (), static_cast <UInt128>(0x2 ) << 108 );
347
+ EXPECT_EQ (num.uintval (), static_cast <UInt128>(0x3FFF2 ) << 108 );
348
+ EXPECT_STREQ (LIBC_NAMESPACE::str (num).c_str (),
349
+ " 0x3FFF2000000000000000000000000000 = "
350
+ " (S: 0, E: 0x3FFF, M: 0x00002000000000000000000000000000)" );
351
+
352
+ Float128Bits negnum (float128 (-1.125 ));
353
+ EXPECT_EQ (negnum.get_sign (), true );
354
+ EXPECT_EQ (negnum.get_unbiased_exponent (), static_cast <uint16_t >(0x3FFF ));
355
+ EXPECT_EQ (negnum.get_mantissa (), static_cast <UInt128>(0x2 ) << 108 );
356
+ EXPECT_EQ (negnum.uintval (), static_cast <UInt128>(0xBFFF2 ) << 108 );
357
+ EXPECT_STREQ (LIBC_NAMESPACE::str (negnum).c_str (),
358
+ " 0xBFFF2000000000000000000000000000 = "
359
+ " (S: 1, E: 0x3FFF, M: 0x00002000000000000000000000000000)" );
360
+ }
361
+ #endif // LIBC_COMPILER_HAS_FLOAT128
0 commit comments