From dcdb23f9db2bd683e5d37558f09b458be25a9b4d Mon Sep 17 00:00:00 2001 From: Henry Chen Date: Fri, 9 Jan 2026 18:46:48 +0800 Subject: [PATCH] gh-143429: Use compile-time NaN encoding detection for test_struct (#143432) --- Lib/test/test_capi/test_float.py | 5 ++--- Lib/test/test_struct.py | 6 +++--- Modules/_testcapi/float.c | 6 +++++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_capi/test_float.py b/Lib/test/test_capi/test_float.py index df7017e6436a..8b25607b6d50 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 @@ class CAPIFloatTest(unittest.TestCase): # 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 cceecdd526c0..bbfe19a4e0ba 100644 --- a/Lib/test/test_struct.py +++ b/Lib/test/test_struct.py @@ -5,7 +5,6 @@ import gc import math import operator import unittest -import platform import struct import sys import weakref @@ -891,6 +890,7 @@ class UnpackIteratorTest(unittest.TestCase): 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 @@ class UnpackIteratorTest(unittest.TestCase): # 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 e3869134c84d..63de77ca6b86 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 } -- 2.47.3