66
68
# SF bug 1530559. struct.pack raises TypeError where it used to convert.
67
69
if PY_STRUCT_FLOAT_COERCE == 2:
68
70
# Test for pre-2.5 struct module
69
packed = struct.pack(format, number)
70
floored = struct.unpack(format, packed)[0]
71
with check_warnings((".*integer argument expected, got float",
72
DeprecationWarning)) as w:
73
packed = struct.pack(format, number)
74
floored = struct.unpack(format, packed)[0]
71
75
self.assertEqual(floored, int(number),
72
76
"did not correcly coerce float to int")
489
493
def test_issue4228(self):
490
494
# Packing a long may yield either 32 or 64 bits
491
x = struct.pack('L', -1)[:4]
495
with check_warnings(quiet=True):
496
x = struct.pack('L', -1)[:4]
492
497
self.assertEqual(x, '\xff'*4)
494
def test_unpack_from(self):
495
test_string = 'abcd01234'
499
def test_unpack_from(self, cls=str):
500
data = cls('abcd01234')
497
502
s = struct.Struct(fmt)
498
for cls in (str, buffer):
499
data = cls(test_string)
500
self.assertEqual(s.unpack_from(data), ('abcd',))
501
self.assertEqual(s.unpack_from(data, 2), ('cd01',))
502
self.assertEqual(s.unpack_from(data, 4), ('0123',))
504
self.assertEqual(s.unpack_from(data, i), (data[i:i+4],))
505
for i in xrange(6, len(test_string) + 1):
506
self.assertRaises(struct.error, s.unpack_from, data, i)
507
for cls in (str, buffer):
508
data = cls(test_string)
509
self.assertEqual(struct.unpack_from(fmt, data), ('abcd',))
510
self.assertEqual(struct.unpack_from(fmt, data, 2), ('cd01',))
511
self.assertEqual(struct.unpack_from(fmt, data, 4), ('0123',))
513
self.assertEqual(struct.unpack_from(fmt, data, i), (data[i:i+4],))
514
for i in xrange(6, len(test_string) + 1):
515
self.assertRaises(struct.error, struct.unpack_from, fmt, data, i)
504
self.assertEqual(s.unpack_from(data), ('abcd',))
505
self.assertEqual(struct.unpack_from(fmt, data), ('abcd',))
507
self.assertEqual(s.unpack_from(data, i), (data[i:i+4],))
508
self.assertEqual(struct.unpack_from(fmt, data, i), (data[i:i+4],))
509
for i in xrange(6, len(data) + 1):
510
self.assertRaises(struct.error, s.unpack_from, data, i)
511
self.assertRaises(struct.error, struct.unpack_from, fmt, data, i)
517
513
def test_pack_into(self):
518
514
test_string = 'Reykjavik rocks, eow!'
561
557
self.assertRaises(struct.error, pack_into, small_buf, 2, test_string)
563
559
def test_unpack_with_buffer(self):
564
# SF bug 1563759: struct.unpack doens't support buffer protocol objects
565
data1 = array.array('B', '\x12\x34\x56\x78')
566
data2 = buffer('......\x12\x34\x56\x78......', 6, 4)
567
for data in [data1, data2]:
568
value, = struct.unpack('>I', data)
569
self.assertEqual(value, 0x12345678)
560
with _check_py3k_warnings(("buffer.. not supported in 3.x",
561
DeprecationWarning)):
562
# SF bug 1563759: struct.unpack doesn't support buffer protocol objects
563
data1 = array.array('B', '\x12\x34\x56\x78')
564
data2 = buffer('......\x12\x34\x56\x78......', 6, 4)
565
for data in [data1, data2]:
566
value, = struct.unpack('>I', data)
567
self.assertEqual(value, 0x12345678)
569
self.test_unpack_from(cls=buffer)
571
571
def test_bool(self):
572
572
for prefix in tuple("<>!=")+('',):
573
573
false = (), [], [], '', 0
574
true = [1], 'test', 5, -1, 0xffffffffL+1, 0xffffffff/2
574
true = [1], 'test', 5, -1, 0xffffffffL+1, 0xffffffff//2
576
576
falseFormat = prefix + '?' * len(false)
577
577
packedFalse = struct.pack(falseFormat, *false)