[libc-commits] [libc] [libc] Add conversion tests between emulated and native f128 (PR #213422)

via libc-commits libc-commits at lists.llvm.org
Sat Aug 1 02:08:04 PDT 2026


https://github.com/Sukumarsawant updated https://github.com/llvm/llvm-project/pull/213422

>From 72676ae64042b6ab6a4c48e2f202b406c2c58366 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 1 Aug 2026 14:16:42 +0530
Subject: [PATCH 1/4] add a test for float128 <-> Float128 converison

---
 libc/test/src/__support/FPUtil/float128_test.cpp | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/libc/test/src/__support/FPUtil/float128_test.cpp b/libc/test/src/__support/FPUtil/float128_test.cpp
index 5ca7e0e5a7d90..3c79a5ecf2c29 100644
--- a/libc/test/src/__support/FPUtil/float128_test.cpp
+++ b/libc/test/src/__support/FPUtil/float128_test.cpp
@@ -11,6 +11,8 @@
 #include "src/__support/FPUtil/float128.h"
 #include "test/UnitTest/FPMatcher.h"
 #include "test/UnitTest/Test.h"
+#include "src/__support/macros/properties/types.h"
+
 
 using LIBC_NAMESPACE::Sign;
 using LIBC_NAMESPACE::fputil::Float128;
@@ -142,3 +144,14 @@ TEST(LlvmLibcFloat128Test, FromIntegralTypes) {
   ASSERT_EQ(static_cast<unsigned>(Float128(2147483648.0)), 2147483648U);
   EXPECT_EQ(LIBC_NAMESPACE::fputil::test_except(FE_INVALID), 0);
 }
+
+#ifdef LIBC_TYPES_HAS_FLOAT128
+TEST(LlvmLibcFloat128Test, NativeFloat128Conversion) {
+  // native to emulated float128
+  ASSERT_TRUE(Float128(static_cast<float128>(1.5)) == Float128(1.5));
+
+  // emulated to native float128
+  ASSERT_TRUE(static_cast<float128>(Float128(3.14)) == static_cast<float128>(3.14));
+}
+#endif // LIBC_TYPES_HAS_FLOAT128
+

>From 8e4e0b5578d0200f55306cf02116a8284b4d5bd8 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 1 Aug 2026 14:18:01 +0530
Subject: [PATCH 2/4] cmake

---
 libc/test/src/__support/FPUtil/CMakeLists.txt    | 1 +
 libc/test/src/__support/FPUtil/float128_test.cpp | 3 +--
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libc/test/src/__support/FPUtil/CMakeLists.txt b/libc/test/src/__support/FPUtil/CMakeLists.txt
index cab95df0e709c..87fd10aaacd90 100644
--- a/libc/test/src/__support/FPUtil/CMakeLists.txt
+++ b/libc/test/src/__support/FPUtil/CMakeLists.txt
@@ -49,6 +49,7 @@ add_fp_unittest(
     libc.hdr.limits_macros
     libc.src.__support.FPUtil.fenv_impl
     libc.src.__support.FPUtil.float128
+    libc.src.__support.macros.properties.types
 )
 
 # TODO: Temporally disable bfloat16 test until MPCommon target is updated
diff --git a/libc/test/src/__support/FPUtil/float128_test.cpp b/libc/test/src/__support/FPUtil/float128_test.cpp
index 3c79a5ecf2c29..748403e0fc6d4 100644
--- a/libc/test/src/__support/FPUtil/float128_test.cpp
+++ b/libc/test/src/__support/FPUtil/float128_test.cpp
@@ -9,10 +9,9 @@
 #include "hdr/limits_macros.h"
 #include "src/__support/FPUtil/FEnvImpl.h"
 #include "src/__support/FPUtil/float128.h"
+#include "src/__support/macros/properties/types.h"
 #include "test/UnitTest/FPMatcher.h"
 #include "test/UnitTest/Test.h"
-#include "src/__support/macros/properties/types.h"
-
 
 using LIBC_NAMESPACE::Sign;
 using LIBC_NAMESPACE::fputil::Float128;

>From 5846b52b4ed2867a16e69b38b91eb16f9b768d77 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 1 Aug 2026 14:27:27 +0530
Subject: [PATCH 3/4] nit

---
 libc/test/src/__support/FPUtil/float128_test.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libc/test/src/__support/FPUtil/float128_test.cpp b/libc/test/src/__support/FPUtil/float128_test.cpp
index 748403e0fc6d4..c76148815db2c 100644
--- a/libc/test/src/__support/FPUtil/float128_test.cpp
+++ b/libc/test/src/__support/FPUtil/float128_test.cpp
@@ -150,7 +150,7 @@ TEST(LlvmLibcFloat128Test, NativeFloat128Conversion) {
   ASSERT_TRUE(Float128(static_cast<float128>(1.5)) == Float128(1.5));
 
   // emulated to native float128
-  ASSERT_TRUE(static_cast<float128>(Float128(3.14)) == static_cast<float128>(3.14));
+  ASSERT_TRUE(static_cast<float128>(Float128(3.14)) ==
+              static_cast<float128>(3.14));
 }
 #endif // LIBC_TYPES_HAS_FLOAT128
-

>From 300c7fc020d663a54f724367c36082467008ced9 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 1 Aug 2026 14:37:38 +0530
Subject: [PATCH 4/4] nit

---
 libc/test/src/__support/FPUtil/float128_test.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/libc/test/src/__support/FPUtil/float128_test.cpp b/libc/test/src/__support/FPUtil/float128_test.cpp
index c76148815db2c..306bcc8f31bc4 100644
--- a/libc/test/src/__support/FPUtil/float128_test.cpp
+++ b/libc/test/src/__support/FPUtil/float128_test.cpp
@@ -147,10 +147,21 @@ TEST(LlvmLibcFloat128Test, FromIntegralTypes) {
 #ifdef LIBC_TYPES_HAS_FLOAT128
 TEST(LlvmLibcFloat128Test, NativeFloat128Conversion) {
   // native to emulated float128
+  ASSERT_TRUE(Float128(static_cast<float128>(0.0)) == Float128(0.0));
   ASSERT_TRUE(Float128(static_cast<float128>(1.5)) == Float128(1.5));
+  ASSERT_TRUE(Float128(static_cast<float128>(-1.5)) == Float128(-1.5));
+  ASSERT_TRUE(Float128(static_cast<float128>(1e300)) == Float128(1e300));
 
   // emulated to native float128
+  ASSERT_TRUE(static_cast<float128>(Float128(0.0)) ==
+              static_cast<float128>(0.0));
   ASSERT_TRUE(static_cast<float128>(Float128(3.14)) ==
               static_cast<float128>(3.14));
+  ASSERT_TRUE(static_cast<float128>(Float128(-3.14)) ==
+              static_cast<float128>(-3.14));
+  ASSERT_TRUE(static_cast<float128>(FPBits::inf(Sign::POS).get_val()) ==
+              static_cast<float128>(FPBits::inf(Sign::POS).get_val()));
+  ASSERT_TRUE(static_cast<float128>(Float128(1e-300)) ==
+              static_cast<float128>(1e-300));
 }
 #endif // LIBC_TYPES_HAS_FLOAT128



More information about the libc-commits mailing list