mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-130317: Fix SNaN broken tests on HP PA RISC (#140452)
While looking at #140028, I found some unrelated test regressions in the 3.14 cycle. These seem to all come from #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
This commit is contained in:
parent
d2f3cfd384
commit
76fea5596c
2 changed files with 15 additions and 2 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
import math
|
import math
|
||||||
import random
|
import random
|
||||||
|
import platform
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
import warnings
|
import warnings
|
||||||
|
|
@ -197,6 +198,10 @@ def test_pack_unpack_roundtrip_for_nans(self):
|
||||||
# PyFloat_Pack/Unpack*() API. See also gh-130317 and
|
# PyFloat_Pack/Unpack*() API. See also gh-130317 and
|
||||||
# e.g. https://developercommunity.visualstudio.com/t/155064
|
# e.g. https://developercommunity.visualstudio.com/t/155064
|
||||||
signaling = 0
|
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)
|
quiet = int(not signaling)
|
||||||
if size == 8:
|
if size == 8:
|
||||||
payload = random.randint(signaling, 0x7ffffffffffff)
|
payload = random.randint(signaling, 0x7ffffffffffff)
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
import math
|
import math
|
||||||
import operator
|
import operator
|
||||||
import unittest
|
import unittest
|
||||||
|
import platform
|
||||||
import struct
|
import struct
|
||||||
import sys
|
import sys
|
||||||
import weakref
|
import weakref
|
||||||
|
|
@ -917,10 +918,17 @@ def test_half_float(self):
|
||||||
|
|
||||||
# Check that packing produces a bit pattern representing a quiet NaN:
|
# Check that packing produces a bit pattern representing a quiet NaN:
|
||||||
# all exponent bits and the msb of the fraction should all be 1.
|
# 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('<e', math.nan)
|
packed = struct.pack('<e', math.nan)
|
||||||
self.assertEqual(packed[1] & 0x7e, 0x7e)
|
self.assertEqual(packed[1] & 0x7e, expected)
|
||||||
packed = struct.pack('<e', -math.nan)
|
packed = struct.pack('<e', -math.nan)
|
||||||
self.assertEqual(packed[1] & 0x7e, 0x7e)
|
self.assertEqual(packed[1] & 0x7e, expected)
|
||||||
|
|
||||||
# Checks for round-to-even behavior
|
# Checks for round-to-even behavior
|
||||||
format_bits_float__rounding_list = [
|
format_bits_float__rounding_list = [
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue