https://github.com/python/cpython/commit/dcdb23f9db2bd683e5d37558f09b458be25a9b4d
commit: dcdb23f9db2bd683e5d37558f09b458be25a9b4d
branch: main
author: Henry Chen <[email protected]>
committer: vstinner <[email protected]>
date: 2026-01-09T10:46:48Z
summary:
gh-143429: Use compile-time NaN encoding detection for test_struct (#143432)
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]