https://github.com/python/cpython/commit/a299c1b1855b77e5195984e6414a3315d92f869a
commit: a299c1b1855b77e5195984e6414a3315d92f869a
branch: 3.14
author: Miss Islington (bot) <[email protected]>
committer: vstinner <[email protected]>
date: 2026-01-09T12:32:49+01:00
summary:

[3.14] gh-143429: Use compile-time NaN encoding detection for test_struct 
(GH-143432) (#143595)

gh-143429: Use compile-time NaN encoding detection for test_struct (GH-143432)
(cherry picked from commit dcdb23f9db2bd683e5d37558f09b458be25a9b4d)

Co-authored-by: Henry Chen <[email protected]>

files:
M Lib/test/test_capi/test_float.py
M Lib/test/test_struct.py
M Modules/_testcapi/float.c

diff --git a/Lib/test/test_capi/test_float.py b/Lib/test/test_capi/test_float.py
index df7017e6436a69..8b25607b6d504f 100644
--- a/Lib/test/test_capi/test_float.py
+++ b/Lib/test/test_capi/test_float.py
@@ -1,6 +1,5 @@
 import math
 import random
-import platform
 import sys
 import unittest
 import warnings
@@ -215,8 +214,8 @@ def test_pack_unpack_roundtrip_for_nans(self):
                     # PyFloat_Pack/Unpack*() API.  See also gh-130317 and
                     # e.g. https://developercommunity.visualstudio.com/t/155064
                     signaling = 0
-                    if platform.machine().startswith('parisc'):
-                        # HP PA RISC uses 0 for quiet, see:
+                    if _testcapi.nan_msb_is_signaling:
+                        # HP PA RISC and some MIPS CPUs use 0 for quiet, see:
                         # https://en.wikipedia.org/wiki/NaN#Encoding
                         signaling = 1
                 i = make_nan(size, sign, not signaling)
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index cceecdd526c006..bbfe19a4e0bab7 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -5,7 +5,6 @@
 import math
 import operator
 import unittest
-import platform
 import struct
 import sys
 import weakref
@@ -891,6 +890,7 @@ def test_module_func(self):
         self.assertRaises(StopIteration, next, it)
 
     def test_half_float(self):
+        _testcapi = import_helper.import_module('_testcapi')
         # Little-endian examples from:
         # http://en.wikipedia.org/wiki/Half_precision_floating-point_format
         format_bits_float__cleanRoundtrip_list = [
@@ -935,8 +935,8 @@ def test_half_float(self):
 
         # Check that packing produces a bit pattern representing a quiet NaN:
         # all exponent bits and the msb of the fraction should all be 1.
-        if platform.machine().startswith('parisc'):
-            # HP PA RISC uses 0 for quiet, see:
+        if _testcapi.nan_msb_is_signaling:
+            # HP PA RISC and some MIPS CPUs use 0 for quiet, see:
             # https://en.wikipedia.org/wiki/NaN#Encoding
             expected = 0x7c
         else:
diff --git a/Modules/_testcapi/float.c b/Modules/_testcapi/float.c
index e3869134c84d43..63de77ca6b8651 100644
--- a/Modules/_testcapi/float.c
+++ b/Modules/_testcapi/float.c
@@ -171,5 +171,9 @@ _PyTestCapi_Init_Float(PyObject *mod)
         return -1;
     }
 
-    return 0;
+#if (defined(__mips__) && !defined(__mips_nan2008)) || defined(__hppa__)
+    return PyModule_Add(mod, "nan_msb_is_signaling", PyBool_FromLong(1));
+#else
+    return PyModule_Add(mod, "nan_msb_is_signaling", PyBool_FromLong(0));
+#endif
 }

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to