|
12 | 12 |
|
13 | 13 | NULL = None
|
14 | 14 |
|
| 15 | +# For PyFloat_Pack/Unpack* |
| 16 | +BIG_ENDIAN = 0 |
| 17 | +LITTLE_ENDIAN = 1 |
| 18 | + |
15 | 19 |
|
16 | 20 | class CAPIFloatTest(unittest.TestCase):
|
17 | 21 | def test_check(self):
|
@@ -112,6 +116,32 @@ def test_getmin(self):
|
112 | 116 |
|
113 | 117 | self.assertEqual(getmin(), sys.float_info.min)
|
114 | 118 |
|
| 119 | + def test_pack(self): |
| 120 | + # Test PyFloat_Pack2(), PyFloat_Pack4() and PyFloat_Pack8() |
| 121 | + pack = _testcapi.float_pack |
| 122 | + |
| 123 | + self.assertEqual(pack(2, 1.5, BIG_ENDIAN), b'>\x00') |
| 124 | + self.assertEqual(pack(4, 1.5, BIG_ENDIAN), b'?\xc0\x00\x00') |
| 125 | + self.assertEqual(pack(8, 1.5, BIG_ENDIAN), |
| 126 | + b'?\xf8\x00\x00\x00\x00\x00\x00') |
| 127 | + self.assertEqual(pack(2, 1.5, LITTLE_ENDIAN), b'\x00>') |
| 128 | + self.assertEqual(pack(4, 1.5, LITTLE_ENDIAN), b'\x00\x00\xc0?') |
| 129 | + self.assertEqual(pack(8, 1.5, LITTLE_ENDIAN), |
| 130 | + b'\x00\x00\x00\x00\x00\x00\xf8?') |
| 131 | + |
| 132 | + def test_unpack(self): |
| 133 | + # Test PyFloat_Unpack2(), PyFloat_Unpack4() and PyFloat_Unpack8() |
| 134 | + unpack = _testcapi.float_unpack |
| 135 | + |
| 136 | + self.assertEqual(unpack(b'>\x00', BIG_ENDIAN), 1.5) |
| 137 | + self.assertEqual(unpack(b'?\xc0\x00\x00', BIG_ENDIAN), 1.5) |
| 138 | + self.assertEqual(unpack(b'?\xf8\x00\x00\x00\x00\x00\x00', BIG_ENDIAN), |
| 139 | + 1.5) |
| 140 | + self.assertEqual(unpack(b'\x00>', LITTLE_ENDIAN), 1.5) |
| 141 | + self.assertEqual(unpack(b'\x00\x00\xc0?', LITTLE_ENDIAN), 1.5) |
| 142 | + self.assertEqual(unpack(b'\x00\x00\x00\x00\x00\x00\xf8?', LITTLE_ENDIAN), |
| 143 | + 1.5) |
| 144 | + |
115 | 145 |
|
116 | 146 | if __name__ == "__main__":
|
117 | 147 | unittest.main()
|
0 commit comments