From fe6f7fdbf73c4cf3a36b44563d0ab69d37456670 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Wed, 22 Oct 2025 09:36:12 -0700 Subject: [PATCH] gh-130317: Fix SNaN broken tests on HP PA RISC (GH-140452) While looking at GH-140028, I found some unrelated test regressions in the 3.14 cycle. These seem to all come from GH-130317. From what I can tell, that made Python more correct than it was before. According to [0], HP PA RISC uses 1 for SNaN and thus a 0 for QNaN. [0]: https://grouper.ieee.org/groups/1788/email/msg03272.html (cherry picked from commit 76fea5596c235a7853cda8df87c3998d506e950c) Co-authored-by: Stefano Rivera --- Lib/test/test_capi/test_float.py | 5 +++++ Lib/test/test_struct.py | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_capi/test_float.py b/Lib/test/test_capi/test_float.py index f7efe0d02549a3..983b991b4f163d 100644 --- a/Lib/test/test_capi/test_float.py +++ b/Lib/test/test_capi/test_float.py @@ -1,5 +1,6 @@ import math import random +import platform import sys import unittest import warnings @@ -197,6 +198,10 @@ 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: + # https://en.wikipedia.org/wiki/NaN#Encoding + signaling = 1 quiet = int(not signaling) if size == 8: payload = random.randint(signaling, 0x7ffffffffffff) diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py index 7df01f28f09118..75c76a36ee92f5 100644 --- a/Lib/test/test_struct.py +++ b/Lib/test/test_struct.py @@ -5,6 +5,7 @@ import math import operator import unittest +import platform import struct import sys import weakref @@ -917,10 +918,17 @@ 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: + # https://en.wikipedia.org/wiki/NaN#Encoding + expected = 0x7c + else: + expected = 0x7e + packed = struct.pack('