gh-121249: adjust formatting codes for complex types in struct/ctypes (#132827)

* F - for float _Complex
* D - for double _Complex
* G - for long double _Complex (not supported by the struct module)
This commit is contained in:
Sergey B Kirpichev 2025-04-23 16:38:24 +03:00 committed by GitHub
parent 41dec4158d
commit 85f89cb3e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 58 additions and 58 deletions

View file

@ -23,7 +23,7 @@
NAN = float('nan')
try:
struct.pack('C', 1j)
struct.pack('D', 1j)
have_c_complex = True
except struct.error:
have_c_complex = False
@ -801,23 +801,23 @@ def test_c_complex_round_trip(self):
values = [complex(*_) for _ in combinations([1, -1, 0.0, -0.0, 2,
-3, INF, -INF, NAN], 2)]
for z in values:
for f in ['E', 'C', '>E', '>C', '<E', '<C']:
for f in ['F', 'D', '>F', '>D', '<F', '<D']:
with self.subTest(z=z, format=f):
round_trip = struct.unpack(f, struct.pack(f, z))[0]
self.assertComplexesAreIdentical(z, round_trip)
@unittest.skipIf(have_c_complex, "requires no C11 complex type support")
def test_c_complex_error(self):
msg1 = "'E' format not supported on this system"
msg2 = "'C' format not supported on this system"
msg1 = "'F' format not supported on this system"
msg2 = "'D' format not supported on this system"
with self.assertRaisesRegex(struct.error, msg1):
struct.pack('E', 1j)
struct.pack('F', 1j)
with self.assertRaisesRegex(struct.error, msg1):
struct.unpack('E', b'1')
struct.unpack('F', b'1')
with self.assertRaisesRegex(struct.error, msg2):
struct.pack('C', 1j)
struct.pack('D', 1j)
with self.assertRaisesRegex(struct.error, msg2):
struct.unpack('C', b'1')
struct.unpack('D', b'1')
class UnpackIteratorTest(unittest.TestCase):