|
1 | 1 | import binascii |
| 2 | +import ctypes |
2 | 3 | import math |
3 | 4 | import struct |
4 | 5 | import sys |
@@ -165,6 +166,48 @@ def test_endian_double(self): |
165 | 166 | self.assertEqual(s.value, math.pi) |
166 | 167 | self.assertEqual(bin(struct.pack(">d", math.pi)), bin(s)) |
167 | 168 |
|
| 169 | + @unittest.skipUnless(hasattr(ctypes, 'c_float_complex'), "No complex types") |
| 170 | + def test_endian_float_complex(self): |
| 171 | + c_float_complex = ctypes.c_float_complex |
| 172 | + if sys.byteorder == "little": |
| 173 | + self.assertIs(c_float_complex.__ctype_le__, c_float_complex) |
| 174 | + self.assertIs(c_float_complex.__ctype_be__.__ctype_le__, |
| 175 | + c_float_complex) |
| 176 | + else: |
| 177 | + self.assertIs(c_float_complex.__ctype_be__, c_float_complex) |
| 178 | + self.assertIs(c_float_complex.__ctype_le__.__ctype_be__, |
| 179 | + c_float_complex) |
| 180 | + s = c_float_complex(math.pi+1j) |
| 181 | + self.assertEqual(bin(struct.pack("F", math.pi+1j)), bin(s)) |
| 182 | + self.assertAlmostEqual(s.value, math.pi+1j, places=6) |
| 183 | + s = c_float_complex.__ctype_le__(math.pi+1j) |
| 184 | + self.assertAlmostEqual(s.value, math.pi+1j, places=6) |
| 185 | + self.assertEqual(bin(struct.pack("<F", math.pi+1j)), bin(s)) |
| 186 | + s = c_float_complex.__ctype_be__(math.pi+1j) |
| 187 | + self.assertAlmostEqual(s.value, math.pi+1j, places=6) |
| 188 | + self.assertEqual(bin(struct.pack(">F", math.pi+1j)), bin(s)) |
| 189 | + |
| 190 | + @unittest.skipUnless(hasattr(ctypes, 'c_double_complex'), "No complex types") |
| 191 | + def test_endian_double_complex(self): |
| 192 | + c_double_complex = ctypes.c_double_complex |
| 193 | + if sys.byteorder == "little": |
| 194 | + self.assertIs(c_double_complex.__ctype_le__, c_double_complex) |
| 195 | + self.assertIs(c_double_complex.__ctype_be__.__ctype_le__, |
| 196 | + c_double_complex) |
| 197 | + else: |
| 198 | + self.assertIs(c_double_complex.__ctype_be__, c_double_complex) |
| 199 | + self.assertIs(c_double_complex.__ctype_le__.__ctype_be__, |
| 200 | + c_double_complex) |
| 201 | + s = c_double_complex(math.pi+1j) |
| 202 | + self.assertEqual(bin(struct.pack("D", math.pi+1j)), bin(s)) |
| 203 | + self.assertAlmostEqual(s.value, math.pi+1j, places=6) |
| 204 | + s = c_double_complex.__ctype_le__(math.pi+1j) |
| 205 | + self.assertAlmostEqual(s.value, math.pi+1j, places=6) |
| 206 | + self.assertEqual(bin(struct.pack("<D", math.pi+1j)), bin(s)) |
| 207 | + s = c_double_complex.__ctype_be__(math.pi+1j) |
| 208 | + self.assertAlmostEqual(s.value, math.pi+1j, places=6) |
| 209 | + self.assertEqual(bin(struct.pack(">D", math.pi+1j)), bin(s)) |
| 210 | + |
168 | 211 | def test_endian_other(self): |
169 | 212 | self.assertIs(c_byte.__ctype_le__, c_byte) |
170 | 213 | self.assertIs(c_byte.__ctype_be__, c_byte) |
|
0 commit comments