Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_struct.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 0872257752c2 |
| children |
| rev | line source |
|---|---|
|
83524
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
1 from collections import abc |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
2 import array |
|
83524
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
3 import operator |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
4 import unittest |
| 4706 | 5 import struct |
|
59366
81477192cf7a
Remove unused imports & clean up sys imports in test_struct.
Mark Dickinson <dickinsm@gmail.com>
parents:
55593
diff
changeset
|
6 import sys |
| 4706 | 7 |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
78312
diff
changeset
|
8 from test import support |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
9 |
|
18111
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
10 ISBIGENDIAN = sys.byteorder == "big" |
|
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
11 |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
12 integer_codes = 'b', 'B', 'h', 'H', 'i', 'I', 'l', 'L', 'q', 'Q', 'n', 'N' |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
13 byteorders = '', '@', '=', '<', '>', '!' |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
14 |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
15 def iter_integer_formats(byteorders=byteorders): |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
16 for code in integer_codes: |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
17 for byteorder in byteorders: |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
18 if (byteorder in ('', '@') and code in ('q', 'Q') and |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
19 not HAVE_LONG_LONG): |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
20 continue |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
21 if (byteorder not in ('', '@') and code in ('n', 'N')): |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
22 continue |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
23 yield code, byteorder |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
24 |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
25 # Native 'q' packing isn't available on systems that don't have the C |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
26 # long long type. |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
27 try: |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
28 struct.pack('q', 5) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
29 except struct.error: |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
30 HAVE_LONG_LONG = False |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
31 else: |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
32 HAVE_LONG_LONG = True |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
33 |
|
18111
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
34 def string_reverse(s): |
|
41891
b7cfb3fd8db0
Make struct tests pass.
Guido van Rossum <guido@python.org>
parents:
41642
diff
changeset
|
35 return s[::-1] |
|
18111
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
36 |
|
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
37 def bigendian_to_native(value): |
|
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
38 if ISBIGENDIAN: |
|
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
39 return value |
|
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
40 else: |
|
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
41 return string_reverse(value) |
|
099ae4918069
Generalize the new qQ std-mode tests to all int codes (bBhHiIlLqQ).
Tim Peters <tim.peters@gmail.com>
parents:
18094
diff
changeset
|
42 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
43 class StructTest(unittest.TestCase): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
44 def test_isbigendian(self): |
|
48325
5f9435317de1
Another merge error, seen on bigendian machines
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
48321
diff
changeset
|
45 self.assertEqual((struct.pack('=i', 1)[0] == 0), ISBIGENDIAN) |
| 4706 | 46 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
47 def test_consistence(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
48 self.assertRaises(struct.error, struct.calcsize, 'Z') |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
49 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
50 sz = struct.calcsize('i') |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
51 self.assertEqual(sz * 3, struct.calcsize('iii')) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
52 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
53 fmt = 'cbxxxxxxhhhhiillffd?' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
54 fmt3 = '3c3b18x12h6i6l6f3d3?' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
55 sz = struct.calcsize(fmt) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
56 sz3 = struct.calcsize(fmt3) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
57 self.assertEqual(sz * 3, sz3) |
| 4706 | 58 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
59 self.assertRaises(struct.error, struct.pack, 'iii', 3) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
60 self.assertRaises(struct.error, struct.pack, 'i', 3, 3, 3) |
|
62894
10c0630f1c14
allow more exceptions
Benjamin Peterson <benjamin@python.org>
parents:
62890
diff
changeset
|
61 self.assertRaises((TypeError, struct.error), struct.pack, 'i', 'foo') |
|
10c0630f1c14
allow more exceptions
Benjamin Peterson <benjamin@python.org>
parents:
62890
diff
changeset
|
62 self.assertRaises((TypeError, struct.error), struct.pack, 'P', 'foo') |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
63 self.assertRaises(struct.error, struct.unpack, 'd', b'flap') |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
64 s = struct.pack('ii', 1, 2) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
65 self.assertRaises(struct.error, struct.unpack, 'iii', s) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
66 self.assertRaises(struct.error, struct.unpack, 'i', s) |
|
4847
d53812d68408
Exercise the new feature set somewhat.
Guido van Rossum <guido@python.org>
parents:
4706
diff
changeset
|
67 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
68 def test_transitiveness(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
69 c = b'a' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
70 b = 1 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
71 h = 255 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
72 i = 65535 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
73 l = 65536 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
74 f = 3.1415 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
75 d = 3.1415 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
76 t = True |
|
4847
d53812d68408
Exercise the new feature set somewhat.
Guido van Rossum <guido@python.org>
parents:
4706
diff
changeset
|
77 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
78 for prefix in ('', '@', '<', '>', '=', '!'): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
79 for format in ('xcbhilfd?', 'xcBHILfd?'): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
80 format = prefix + format |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
81 s = struct.pack(format, c, b, h, i, l, f, d, t) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
82 cp, bp, hp, ip, lp, fp, dp, tp = struct.unpack(format, s) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
83 self.assertEqual(cp, c) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
84 self.assertEqual(bp, b) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
85 self.assertEqual(hp, h) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
86 self.assertEqual(ip, i) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
87 self.assertEqual(lp, l) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
88 self.assertEqual(int(100 * fp), int(100 * f)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
89 self.assertEqual(int(100 * dp), int(100 * d)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
90 self.assertEqual(tp, t) |
|
4847
d53812d68408
Exercise the new feature set somewhat.
Guido van Rossum <guido@python.org>
parents:
4706
diff
changeset
|
91 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
92 def test_new_features(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
93 # Test some of the new features in detail |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
94 # (format, argument, big-endian result, little-endian result, asymmetric) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
95 tests = [ |
|
67181
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
96 ('c', b'a', b'a', b'a', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
97 ('xc', b'a', b'\0a', b'\0a', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
98 ('cx', b'a', b'a\0', b'a\0', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
99 ('s', b'a', b'a', b'a', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
100 ('0s', b'helloworld', b'', b'', 1), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
101 ('1s', b'helloworld', b'h', b'h', 1), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
102 ('9s', b'helloworld', b'helloworl', b'helloworl', 1), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
103 ('10s', b'helloworld', b'helloworld', b'helloworld', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
104 ('11s', b'helloworld', b'helloworld\0', b'helloworld\0', 1), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
105 ('20s', b'helloworld', b'helloworld'+10*b'\0', b'helloworld'+10*b'\0', 1), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
106 ('b', 7, b'\7', b'\7', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
107 ('b', -7, b'\371', b'\371', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
108 ('B', 7, b'\7', b'\7', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
109 ('B', 249, b'\371', b'\371', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
110 ('h', 700, b'\002\274', b'\274\002', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
111 ('h', -700, b'\375D', b'D\375', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
112 ('H', 700, b'\002\274', b'\274\002', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
113 ('H', 0x10000-700, b'\375D', b'D\375', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
114 ('i', 70000000, b'\004,\035\200', b'\200\035,\004', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
115 ('i', -70000000, b'\373\323\342\200', b'\200\342\323\373', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
116 ('I', 70000000, b'\004,\035\200', b'\200\035,\004', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
117 ('I', 0x100000000-70000000, b'\373\323\342\200', b'\200\342\323\373', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
118 ('l', 70000000, b'\004,\035\200', b'\200\035,\004', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
119 ('l', -70000000, b'\373\323\342\200', b'\200\342\323\373', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
120 ('L', 70000000, b'\004,\035\200', b'\200\035,\004', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
121 ('L', 0x100000000-70000000, b'\373\323\342\200', b'\200\342\323\373', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
122 ('f', 2.0, b'@\000\000\000', b'\000\000\000@', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
123 ('d', 2.0, b'@\000\000\000\000\000\000\000', |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
124 b'\000\000\000\000\000\000\000@', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
125 ('f', -2.0, b'\300\000\000\000', b'\000\000\000\300', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
126 ('d', -2.0, b'\300\000\000\000\000\000\000\000', |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
127 b'\000\000\000\000\000\000\000\300', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
128 ('?', 0, b'\0', b'\0', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
129 ('?', 3, b'\1', b'\1', 1), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
130 ('?', True, b'\1', b'\1', 0), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
131 ('?', [], b'\0', b'\0', 1), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
132 ('?', (1,), b'\1', b'\1', 1), |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
133 ] |
|
18069
8e187740aa96
Initial support for 'q' and 'Q' struct format codes: for now, only in
Tim Peters <tim.peters@gmail.com>
parents:
15540
diff
changeset
|
134 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
135 for fmt, arg, big, lil, asy in tests: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
136 for (xfmt, exp) in [('>'+fmt, big), ('!'+fmt, big), ('<'+fmt, lil), |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
137 ('='+fmt, ISBIGENDIAN and big or lil)]: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
138 res = struct.pack(xfmt, arg) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
139 self.assertEqual(res, exp) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
140 self.assertEqual(struct.calcsize(xfmt), len(res)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
141 rev = struct.unpack(xfmt, res)[0] |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
142 if rev != arg: |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
53271
diff
changeset
|
143 self.assertTrue(asy) |
|
18084
bbcdbd8f4469
Added q/Q standard (x-platform 8-byte ints) mode in struct module.
Tim Peters <tim.peters@gmail.com>
parents:
18070
diff
changeset
|
144 |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
145 def test_calcsize(self): |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
146 expected_size = { |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
147 'b': 1, 'B': 1, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
148 'h': 2, 'H': 2, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
149 'i': 4, 'I': 4, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
150 'l': 4, 'L': 4, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
151 'q': 8, 'Q': 8, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
152 } |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
153 |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
154 # standard integer sizes |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
155 for code, byteorder in iter_integer_formats(('=', '<', '>', '!')): |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
156 format = byteorder+code |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
157 size = struct.calcsize(format) |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
158 self.assertEqual(size, expected_size[code]) |
|
18084
bbcdbd8f4469
Added q/Q standard (x-platform 8-byte ints) mode in struct module.
Tim Peters <tim.peters@gmail.com>
parents:
18070
diff
changeset
|
159 |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
160 # native integer sizes |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
161 native_pairs = 'bB', 'hH', 'iI', 'lL', 'nN' |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
162 if HAVE_LONG_LONG: |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
163 native_pairs += 'qQ', |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
164 for format_pair in native_pairs: |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
165 for byteorder in '', '@': |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
166 signed_size = struct.calcsize(byteorder + format_pair[0]) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
167 unsigned_size = struct.calcsize(byteorder + format_pair[1]) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
168 self.assertEqual(signed_size, unsigned_size) |
|
18084
bbcdbd8f4469
Added q/Q standard (x-platform 8-byte ints) mode in struct module.
Tim Peters <tim.peters@gmail.com>
parents:
18070
diff
changeset
|
169 |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
170 # bounds for native integer sizes |
|
60305
58dc4f316ff6
Merged revisions 79740 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
60267
diff
changeset
|
171 self.assertEqual(struct.calcsize('b'), 1) |
|
58dc4f316ff6
Merged revisions 79740 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
60267
diff
changeset
|
172 self.assertLessEqual(2, struct.calcsize('h')) |
|
58dc4f316ff6
Merged revisions 79740 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
60267
diff
changeset
|
173 self.assertLessEqual(4, struct.calcsize('l')) |
|
58dc4f316ff6
Merged revisions 79740 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
60267
diff
changeset
|
174 self.assertLessEqual(struct.calcsize('h'), struct.calcsize('i')) |
|
58dc4f316ff6
Merged revisions 79740 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
60267
diff
changeset
|
175 self.assertLessEqual(struct.calcsize('i'), struct.calcsize('l')) |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
176 if HAVE_LONG_LONG: |
|
60305
58dc4f316ff6
Merged revisions 79740 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
60267
diff
changeset
|
177 self.assertLessEqual(8, struct.calcsize('q')) |
|
58dc4f316ff6
Merged revisions 79740 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
60267
diff
changeset
|
178 self.assertLessEqual(struct.calcsize('l'), struct.calcsize('q')) |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
179 self.assertGreaterEqual(struct.calcsize('n'), struct.calcsize('i')) |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
180 self.assertGreaterEqual(struct.calcsize('n'), struct.calcsize('P')) |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
181 |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
182 def test_integers(self): |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
183 # Integer tests (bBhHiIlLqQnN). |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
184 import binascii |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
185 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
186 class IntTester(unittest.TestCase): |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
187 def __init__(self, format): |
|
52827
c50c079b09eb
Merged revisions 70837,70864,70878,71004,71032,71043 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52414
diff
changeset
|
188 super(IntTester, self).__init__(methodName='test_one') |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
189 self.format = format |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
190 self.code = format[-1] |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
191 self.byteorder = format[:-1] |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
192 if not self.byteorder in byteorders: |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
193 raise ValueError("unrecognized packing byteorder: %s" % |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
194 self.byteorder) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
195 self.bytesize = struct.calcsize(format) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
196 self.bitsize = self.bytesize * 8 |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
197 if self.code in tuple('bhilqn'): |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
198 self.signed = True |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
199 self.min_value = -(2**(self.bitsize-1)) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
200 self.max_value = 2**(self.bitsize-1) - 1 |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
201 elif self.code in tuple('BHILQN'): |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
202 self.signed = False |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
203 self.min_value = 0 |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
204 self.max_value = 2**self.bitsize - 1 |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
205 else: |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
206 raise ValueError("unrecognized format code: %s" % |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
207 self.code) |
|
18084
bbcdbd8f4469
Added q/Q standard (x-platform 8-byte ints) mode in struct module.
Tim Peters <tim.peters@gmail.com>
parents:
18070
diff
changeset
|
208 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
209 def test_one(self, x, pack=struct.pack, |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
210 unpack=struct.unpack, |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
211 unhexlify=binascii.unhexlify): |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
212 |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
213 format = self.format |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
214 if self.min_value <= x <= self.max_value: |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
215 expected = x |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
216 if self.signed and x < 0: |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
217 expected += 1 << self.bitsize |
|
60305
58dc4f316ff6
Merged revisions 79740 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
60267
diff
changeset
|
218 self.assertGreaterEqual(expected, 0) |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
219 expected = '%x' % expected |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
220 if len(expected) & 1: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
221 expected = "0" + expected |
|
63244
f214ad09c384
Issue #4770: Restrict binascii module to accept only bytes (as specified).
Florent Xicluna <florent.xicluna@gmail.com>
parents:
62991
diff
changeset
|
222 expected = expected.encode('ascii') |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
223 expected = unhexlify(expected) |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
224 expected = (b"\x00" * (self.bytesize - len(expected)) + |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
225 expected) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
226 if (self.byteorder == '<' or |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
227 self.byteorder in ('', '@', '=') and not ISBIGENDIAN): |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
228 expected = string_reverse(expected) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
229 self.assertEqual(len(expected), self.bytesize) |
|
18084
bbcdbd8f4469
Added q/Q standard (x-platform 8-byte ints) mode in struct module.
Tim Peters <tim.peters@gmail.com>
parents:
18070
diff
changeset
|
230 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
231 # Pack work? |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
232 got = pack(format, x) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
233 self.assertEqual(got, expected) |
|
18084
bbcdbd8f4469
Added q/Q standard (x-platform 8-byte ints) mode in struct module.
Tim Peters <tim.peters@gmail.com>
parents:
18070
diff
changeset
|
234 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
235 # Unpack work? |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
236 retrieved = unpack(format, got)[0] |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
237 self.assertEqual(x, retrieved) |
|
18084
bbcdbd8f4469
Added q/Q standard (x-platform 8-byte ints) mode in struct module.
Tim Peters <tim.peters@gmail.com>
parents:
18070
diff
changeset
|
238 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
239 # Adding any byte should cause a "too big" error. |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
240 self.assertRaises((struct.error, TypeError), unpack, format, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
241 b'\x01' + got) |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
242 else: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
243 # x is out of range -- verify pack realizes that. |
|
62932
5e60c7db0f51
ValueError is eventually what we want to move to, I suppose
Benjamin Peterson <benjamin@python.org>
parents:
62896
diff
changeset
|
244 self.assertRaises((OverflowError, ValueError, struct.error), |
|
5e60c7db0f51
ValueError is eventually what we want to move to, I suppose
Benjamin Peterson <benjamin@python.org>
parents:
62896
diff
changeset
|
245 pack, format, x) |
|
19924
01f66f5db326
The 'p' (Pascal string) pack code acts unreasonably when the string size
Tim Peters <tim.peters@gmail.com>
parents:
18149
diff
changeset
|
246 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
247 def run(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
248 from random import randrange |
|
19924
01f66f5db326
The 'p' (Pascal string) pack code acts unreasonably when the string size
Tim Peters <tim.peters@gmail.com>
parents:
18149
diff
changeset
|
249 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
250 # Create all interesting powers of 2. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
251 values = [] |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
252 for exp in range(self.bitsize + 3): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
253 values.append(1 << exp) |
|
19924
01f66f5db326
The 'p' (Pascal string) pack code acts unreasonably when the string size
Tim Peters <tim.peters@gmail.com>
parents:
18149
diff
changeset
|
254 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
255 # Add some random values. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
256 for i in range(self.bitsize): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
257 val = 0 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
258 for j in range(self.bytesize): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
259 val = (val << 8) | randrange(256) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
260 values.append(val) |
|
19924
01f66f5db326
The 'p' (Pascal string) pack code acts unreasonably when the string size
Tim Peters <tim.peters@gmail.com>
parents:
18149
diff
changeset
|
261 |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
262 # Values absorbed from other tests |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
263 values.extend([300, 700000, sys.maxsize*4]) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
264 |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
265 # Try all those, and their negations, and +-1 from |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
266 # them. Note that this tests all power-of-2 |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
267 # boundaries in range, and a few out of range, plus |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
268 # +-(2**n +- 1). |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
269 for base in values: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
270 for val in -base, base: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
271 for incr in -1, 0, 1: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
272 x = val + incr |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
273 self.test_one(x) |
|
28334
9f287e5eb037
SF bug 705836: struct.pack of floats in non-native endian order
Tim Peters <tim.peters@gmail.com>
parents:
28089
diff
changeset
|
274 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
275 # Some error cases. |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
276 class NotAnInt: |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
277 def __int__(self): |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
278 return 42 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
279 |
|
60309
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
280 # Objects with an '__index__' method should be allowed |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
281 # to pack as integers. That is assuming the implemented |
|
85418
4d62a62ba44d
Issue #18783: Removed existing mentions of Python long type in docstrings,
Serhiy Storchaka <storchaka@gmail.com>
parents:
78316
diff
changeset
|
282 # '__index__' method returns an 'int'. |
|
60309
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
283 class Indexable(object): |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
284 def __init__(self, value): |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
285 self._value = value |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
286 |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
287 def __index__(self): |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
288 return self._value |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
289 |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
290 # If the '__index__' method raises a type error, then |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
291 # '__int__' should be used with a deprecation warning. |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
292 class BadIndex(object): |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
293 def __index__(self): |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
294 raise TypeError |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
295 |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
296 def __int__(self): |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
297 return 42 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
298 |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
299 self.assertRaises((TypeError, struct.error), |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
300 struct.pack, self.format, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
301 "a string") |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
302 self.assertRaises((TypeError, struct.error), |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
303 struct.pack, self.format, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
304 randrange) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
305 self.assertRaises((TypeError, struct.error), |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
306 struct.pack, self.format, |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
307 3+42j) |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
308 self.assertRaises((TypeError, struct.error), |
|
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
309 struct.pack, self.format, |
|
60309
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
310 NotAnInt()) |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
311 self.assertRaises((TypeError, struct.error), |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
312 struct.pack, self.format, |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
313 BadIndex()) |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
314 |
|
60309
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
315 # Check for legitimate values from '__index__'. |
|
60267
aa121a39a956
Merged revisions 79674 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60247
diff
changeset
|
316 for obj in (Indexable(0), Indexable(10), Indexable(17), |
|
aa121a39a956
Merged revisions 79674 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60247
diff
changeset
|
317 Indexable(42), Indexable(100), Indexable(127)): |
|
aa121a39a956
Merged revisions 79674 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60247
diff
changeset
|
318 try: |
|
aa121a39a956
Merged revisions 79674 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60247
diff
changeset
|
319 struct.pack(format, obj) |
|
aa121a39a956
Merged revisions 79674 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60247
diff
changeset
|
320 except: |
|
aa121a39a956
Merged revisions 79674 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60247
diff
changeset
|
321 self.fail("integer code pack failed on object " |
|
aa121a39a956
Merged revisions 79674 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60247
diff
changeset
|
322 "with '__index__' method") |
|
aa121a39a956
Merged revisions 79674 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60247
diff
changeset
|
323 |
|
60309
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
324 # Check for bogus values from '__index__'. |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
325 for obj in (Indexable(b'a'), Indexable('b'), Indexable(None), |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
326 Indexable({'a': 1}), Indexable([1, 2, 3])): |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
327 self.assertRaises((TypeError, struct.error), |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
328 struct.pack, self.format, |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
329 obj) |
|
72409b231967
Merged revisions 79745 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
60305
diff
changeset
|
330 |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
331 for code, byteorder in iter_integer_formats(): |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
332 format = byteorder+code |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
333 t = IntTester(format) |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
334 t.run() |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
335 |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
336 def test_nN_code(self): |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
337 # n and N don't exist in standard sizes |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
338 def assertStructError(func, *args, **kwargs): |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
339 with self.assertRaises(struct.error) as cm: |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
340 func(*args, **kwargs) |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
341 self.assertIn("bad char in struct format", str(cm.exception)) |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
342 for code in 'nN': |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
343 for byteorder in ('=', '<', '>', '!'): |
|
60247
bd5121bf6996
Clean up integer tests in test_struct, and bring them more in line with the trunk tests.
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
344 format = byteorder+code |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
345 assertStructError(struct.calcsize, format) |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
346 assertStructError(struct.pack, format, 0) |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
347 assertStructError(struct.unpack, format, b"") |
|
28334
9f287e5eb037
SF bug 705836: struct.pack of floats in non-native endian order
Tim Peters <tim.peters@gmail.com>
parents:
28089
diff
changeset
|
348 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
349 def test_p_code(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
350 # Test p ("Pascal string") code. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
351 for code, input, expected, expectedback in [ |
|
67181
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
352 ('p', b'abc', b'\x00', b''), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
353 ('1p', b'abc', b'\x00', b''), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
354 ('2p', b'abc', b'\x01a', b'a'), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
355 ('3p', b'abc', b'\x02ab', b'ab'), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
356 ('4p', b'abc', b'\x03abc', b'abc'), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
357 ('5p', b'abc', b'\x03abc\x00', b'abc'), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
358 ('6p', b'abc', b'\x03abc\x00\x00', b'abc'), |
|
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
359 ('1000p', b'x'*1000, b'\xff' + b'x'*999, b'x'*255)]: |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
360 got = struct.pack(code, input) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
361 self.assertEqual(got, expected) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
362 (got,) = struct.unpack(code, got) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
363 self.assertEqual(got, expectedback) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
364 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
365 def test_705836(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
366 # SF bug 705836. "<f" and ">f" had a severe rounding bug, where a carry |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
367 # from the low-order discarded bits could propagate into the exponent |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
368 # field, causing the result to be wrong by a factor of 2. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
369 import math |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
370 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
371 for base in range(1, 33): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
372 # smaller <- largest representable float less than base. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
373 delta = 0.5 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
374 while base - delta / 2.0 != base: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
375 delta /= 2.0 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
376 smaller = base - delta |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
377 # Packing this rounds away a solid string of trailing 1 bits. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
378 packed = struct.pack("<f", smaller) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
379 unpacked = struct.unpack("<f", packed)[0] |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
380 # This failed at base = 2, 4, and 32, with unpacked = 1, 2, and |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
381 # 16, respectively. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
382 self.assertEqual(base, unpacked) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
383 bigpacked = struct.pack(">f", smaller) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
384 self.assertEqual(bigpacked, string_reverse(packed)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
385 unpacked = struct.unpack(">f", bigpacked)[0] |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
386 self.assertEqual(base, unpacked) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
387 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
388 # Largest finite IEEE single. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
389 big = (1 << 24) - 1 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
390 big = math.ldexp(big, 127 - 23) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
391 packed = struct.pack(">f", big) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
392 unpacked = struct.unpack(">f", packed)[0] |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
393 self.assertEqual(big, unpacked) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
394 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
395 # The same, but tack on a 1 bit so it rounds up to infinity. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
396 big = (1 << 25) - 1 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
397 big = math.ldexp(big, 127 - 24) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
398 self.assertRaises(OverflowError, struct.pack, ">f", big) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
399 |
|
53271
4527c152daa9
Issue #5463: Remove deprecated float coercion from struct module, along
Mark Dickinson <dickinsm@gmail.com>
parents:
52827
diff
changeset
|
400 def test_1530559(self): |
|
72749
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
401 for code, byteorder in iter_integer_formats(): |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
402 format = byteorder + code |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
403 self.assertRaises(struct.error, struct.pack, format, 1.0) |
|
db3e15017172
Issue #3163: The struct module gets new format characters 'n' and 'N'
Antoine Pitrou <solipsis@pitrou.net>
parents:
68586
diff
changeset
|
404 self.assertRaises(struct.error, struct.pack, format, 1.5) |
|
53271
4527c152daa9
Issue #5463: Remove deprecated float coercion from struct module, along
Mark Dickinson <dickinsm@gmail.com>
parents:
52827
diff
changeset
|
405 self.assertRaises(struct.error, struct.pack, 'P', 1.0) |
|
4527c152daa9
Issue #5463: Remove deprecated float coercion from struct module, along
Mark Dickinson <dickinsm@gmail.com>
parents:
52827
diff
changeset
|
406 self.assertRaises(struct.error, struct.pack, 'P', 1.5) |
|
4527c152daa9
Issue #5463: Remove deprecated float coercion from struct module, along
Mark Dickinson <dickinsm@gmail.com>
parents:
52827
diff
changeset
|
407 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
408 def test_unpack_from(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
409 test_string = b'abcd01234' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
410 fmt = '4s' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
411 s = struct.Struct(fmt) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
412 for cls in (bytes, bytearray): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
413 data = cls(test_string) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
414 self.assertEqual(s.unpack_from(data), (b'abcd',)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
415 self.assertEqual(s.unpack_from(data, 2), (b'cd01',)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
416 self.assertEqual(s.unpack_from(data, 4), (b'0123',)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
417 for i in range(6): |
|
67181
b901da561cd1
Issue #10783: struct.pack() doesn't encode implicitly unicode to UTF-8
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64355
diff
changeset
|
418 self.assertEqual(s.unpack_from(data, i), (data[i:i+4],)) |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
419 for i in range(6, len(test_string) + 1): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
420 self.assertRaises(struct.error, s.unpack_from, data, i) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
421 for cls in (bytes, bytearray): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
422 data = cls(test_string) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
423 self.assertEqual(struct.unpack_from(fmt, data), (b'abcd',)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
424 self.assertEqual(struct.unpack_from(fmt, data, 2), (b'cd01',)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
425 self.assertEqual(struct.unpack_from(fmt, data, 4), (b'0123',)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
426 for i in range(6): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
427 self.assertEqual(struct.unpack_from(fmt, data, i), (data[i:i+4],)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
428 for i in range(6, len(test_string) + 1): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
429 self.assertRaises(struct.error, struct.unpack_from, fmt, data, i) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
430 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
431 def test_pack_into(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
432 test_string = b'Reykjavik rocks, eow!' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
433 writable_buf = array.array('b', b' '*100) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
434 fmt = '21s' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
435 s = struct.Struct(fmt) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
436 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
437 # Test without offset |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
438 s.pack_into(writable_buf, 0, test_string) |
|
64355
fa8b57f987c5
Issue #8990: array.fromstring() and array.tostring() get renamed to
Antoine Pitrou <solipsis@pitrou.net>
parents:
63419
diff
changeset
|
439 from_buf = writable_buf.tobytes()[:len(test_string)] |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
440 self.assertEqual(from_buf, test_string) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
441 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
442 # Test with offset. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
443 s.pack_into(writable_buf, 10, test_string) |
|
64355
fa8b57f987c5
Issue #8990: array.fromstring() and array.tostring() get renamed to
Antoine Pitrou <solipsis@pitrou.net>
parents:
63419
diff
changeset
|
444 from_buf = writable_buf.tobytes()[:len(test_string)+10] |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
445 self.assertEqual(from_buf, test_string[:10] + test_string) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
446 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
447 # Go beyond boundaries. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
448 small_buf = array.array('b', b' '*10) |
|
62856
8c6b3dc652fb
Merged revisions 82637 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62855
diff
changeset
|
449 self.assertRaises((ValueError, struct.error), s.pack_into, small_buf, 0, |
|
8c6b3dc652fb
Merged revisions 82637 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62855
diff
changeset
|
450 test_string) |
|
8c6b3dc652fb
Merged revisions 82637 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62855
diff
changeset
|
451 self.assertRaises((ValueError, struct.error), s.pack_into, small_buf, 2, |
|
8c6b3dc652fb
Merged revisions 82637 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62855
diff
changeset
|
452 test_string) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
453 |
|
51596
a83f10edb6ff
#3694: fix an "XXX undetected error" leak in struct.
Georg Brandl <georg@python.org>
parents:
51518
diff
changeset
|
454 # Test bogus offset (issue 3694) |
|
a83f10edb6ff
#3694: fix an "XXX undetected error" leak in struct.
Georg Brandl <georg@python.org>
parents:
51518
diff
changeset
|
455 sb = small_buf |
| 62896 | 456 self.assertRaises((TypeError, struct.error), struct.pack_into, b'', sb, |
| 457 None) | |
|
51596
a83f10edb6ff
#3694: fix an "XXX undetected error" leak in struct.
Georg Brandl <georg@python.org>
parents:
51518
diff
changeset
|
458 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
459 def test_pack_into_fn(self): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
460 test_string = b'Reykjavik rocks, eow!' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
461 writable_buf = array.array('b', b' '*100) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
462 fmt = '21s' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
463 pack_into = lambda *args: struct.pack_into(fmt, *args) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
464 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
465 # Test without offset. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
466 pack_into(writable_buf, 0, test_string) |
|
64355
fa8b57f987c5
Issue #8990: array.fromstring() and array.tostring() get renamed to
Antoine Pitrou <solipsis@pitrou.net>
parents:
63419
diff
changeset
|
467 from_buf = writable_buf.tobytes()[:len(test_string)] |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
468 self.assertEqual(from_buf, test_string) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
469 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
470 # Test with offset. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
471 pack_into(writable_buf, 10, test_string) |
|
64355
fa8b57f987c5
Issue #8990: array.fromstring() and array.tostring() get renamed to
Antoine Pitrou <solipsis@pitrou.net>
parents:
63419
diff
changeset
|
472 from_buf = writable_buf.tobytes()[:len(test_string)+10] |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
473 self.assertEqual(from_buf, test_string[:10] + test_string) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
33599
diff
changeset
|
474 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
475 # Go beyond boundaries. |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
476 small_buf = array.array('b', b' '*10) |
|
62856
8c6b3dc652fb
Merged revisions 82637 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62855
diff
changeset
|
477 self.assertRaises((ValueError, struct.error), pack_into, small_buf, 0, |
|
8c6b3dc652fb
Merged revisions 82637 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62855
diff
changeset
|
478 test_string) |
|
8c6b3dc652fb
Merged revisions 82637 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62855
diff
changeset
|
479 self.assertRaises((ValueError, struct.error), pack_into, small_buf, 2, |
|
8c6b3dc652fb
Merged revisions 82637 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62855
diff
changeset
|
480 test_string) |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
481 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
482 def test_unpack_with_buffer(self): |
|
68585
bf94b6a73fc8
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
62856
diff
changeset
|
483 # SF bug 1563759: struct.unpack doesn't support buffer protocol objects |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
484 data1 = array.array('B', b'\x12\x34\x56\x78') |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
485 data2 = memoryview(b'\x12\x34\x56\x78') # XXX b'......XXXX......', 6, 4 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
486 for data in [data1, data2]: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
487 value, = struct.unpack('>I', data) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
488 self.assertEqual(value, 0x12345678) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
489 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
490 def test_bool(self): |
|
62855
55a024f51524
Merged revisions 82628,82630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62251
diff
changeset
|
491 class ExplodingBool(object): |
|
55a024f51524
Merged revisions 82628,82630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62251
diff
changeset
|
492 def __bool__(self): |
|
81039
7d69d04522e3
Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78316
diff
changeset
|
493 raise OSError |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
494 for prefix in tuple("<>!=")+('',): |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
495 false = (), [], [], '', 0 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
496 true = [1], 'test', 5, -1, 0xffffffff+1, 0xffffffff/2 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
497 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
498 falseFormat = prefix + '?' * len(false) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
499 packedFalse = struct.pack(falseFormat, *false) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
500 unpackedFalse = struct.unpack(falseFormat, packedFalse) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
501 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
502 trueFormat = prefix + '?' * len(true) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
503 packedTrue = struct.pack(trueFormat, *true) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
504 unpackedTrue = struct.unpack(trueFormat, packedTrue) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
505 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
506 self.assertEqual(len(true), len(unpackedTrue)) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
507 self.assertEqual(len(false), len(unpackedFalse)) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
508 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
509 for t in unpackedFalse: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
510 self.assertFalse(t) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
511 for t in unpackedTrue: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
512 self.assertTrue(t) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
513 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
514 packed = struct.pack(prefix+'?', 1) |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
515 |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
516 self.assertEqual(len(packed), struct.calcsize(prefix+'?')) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
517 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
518 if len(packed) != 1: |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
519 self.assertFalse(prefix, msg='encoded bool is not one byte: %r' |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
520 %packed) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
521 |
|
62991
60fdf147032c
Yield more information on failure in test_struct boolean test.
Mark Dickinson <dickinsm@gmail.com>
parents:
62932
diff
changeset
|
522 try: |
|
60fdf147032c
Yield more information on failure in test_struct boolean test.
Mark Dickinson <dickinsm@gmail.com>
parents:
62932
diff
changeset
|
523 struct.pack(prefix + '?', ExplodingBool()) |
|
81039
7d69d04522e3
Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78316
diff
changeset
|
524 except OSError: |
|
62991
60fdf147032c
Yield more information on failure in test_struct boolean test.
Mark Dickinson <dickinsm@gmail.com>
parents:
62932
diff
changeset
|
525 pass |
|
60fdf147032c
Yield more information on failure in test_struct boolean test.
Mark Dickinson <dickinsm@gmail.com>
parents:
62932
diff
changeset
|
526 else: |
|
81039
7d69d04522e3
Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78316
diff
changeset
|
527 self.fail("Expected OSError: struct.pack(%r, " |
|
62991
60fdf147032c
Yield more information on failure in test_struct boolean test.
Mark Dickinson <dickinsm@gmail.com>
parents:
62932
diff
changeset
|
528 "ExplodingBool())" % (prefix + '?')) |
|
62855
55a024f51524
Merged revisions 82628,82630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62251
diff
changeset
|
529 |
|
55a024f51524
Merged revisions 82628,82630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62251
diff
changeset
|
530 for c in [b'\x01', b'\x7f', b'\xff', b'\x0f', b'\xf0']: |
|
55a024f51524
Merged revisions 82628,82630 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
62251
diff
changeset
|
531 self.assertTrue(struct.unpack('>?', c)[0]) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
532 |
|
62251
50c239174976
Merged revisions 81897-81898,81902 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
533 def test_count_overflow(self): |
|
50c239174976
Merged revisions 81897-81898,81902 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
534 hugecount = '{}b'.format(sys.maxsize+1) |
|
50c239174976
Merged revisions 81897-81898,81902 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
535 self.assertRaises(struct.error, struct.calcsize, hugecount) |
|
50c239174976
Merged revisions 81897-81898,81902 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
536 |
|
50c239174976
Merged revisions 81897-81898,81902 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
537 hugecount2 = '{}b{}H'.format(sys.maxsize//2, sys.maxsize//2) |
|
50c239174976
Merged revisions 81897-81898,81902 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
538 self.assertRaises(struct.error, struct.calcsize, hugecount2) |
|
50c239174976
Merged revisions 81897-81898,81902 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
59366
diff
changeset
|
539 |
|
62243
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
540 def test_trailing_counter(self): |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
541 store = array.array('b', b' '*100) |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
542 |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
543 # format lists containing only count spec should result in an error |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
544 self.assertRaises(struct.error, struct.pack, '12345') |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
545 self.assertRaises(struct.error, struct.unpack, '12345', '') |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
546 self.assertRaises(struct.error, struct.pack_into, '12345', store, 0) |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
547 self.assertRaises(struct.error, struct.unpack_from, '12345', store, 0) |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
548 |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
549 # Format lists with trailing count spec should result in an error |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
550 self.assertRaises(struct.error, struct.pack, 'c12345', 'x') |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
551 self.assertRaises(struct.error, struct.unpack, 'c12345', 'x') |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
552 self.assertRaises(struct.error, struct.pack_into, 'c12345', store, 0, |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
553 'x') |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
554 self.assertRaises(struct.error, struct.unpack_from, 'c12345', store, |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
555 0) |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
556 |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
557 # Mixed format tests |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
558 self.assertRaises(struct.error, struct.pack, '14s42', 'spam and eggs') |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
559 self.assertRaises(struct.error, struct.unpack, '14s42', |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
560 'spam and eggs') |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
561 self.assertRaises(struct.error, struct.pack_into, '14s42', store, 0, |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
562 'spam and eggs') |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
563 self.assertRaises(struct.error, struct.unpack_from, '14s42', store, 0) |
|
3ba1b5b4c108
Issue #3129: Trailing digits in format string are no longer ignored.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
60309
diff
changeset
|
564 |
|
63419
1f0271c036e1
Add test for memory leak reported in issue 9422.
Mark Dickinson <dickinsm@gmail.com>
parents:
63244
diff
changeset
|
565 def test_Struct_reinitialization(self): |
|
1f0271c036e1
Add test for memory leak reported in issue 9422.
Mark Dickinson <dickinsm@gmail.com>
parents:
63244
diff
changeset
|
566 # Issue 9422: there was a memory leak when reinitializing a |
|
1f0271c036e1
Add test for memory leak reported in issue 9422.
Mark Dickinson <dickinsm@gmail.com>
parents:
63244
diff
changeset
|
567 # Struct instance. This test can be used to detect the leak |
|
1f0271c036e1
Add test for memory leak reported in issue 9422.
Mark Dickinson <dickinsm@gmail.com>
parents:
63244
diff
changeset
|
568 # when running with regrtest -L. |
|
1f0271c036e1
Add test for memory leak reported in issue 9422.
Mark Dickinson <dickinsm@gmail.com>
parents:
63244
diff
changeset
|
569 s = struct.Struct('i') |
|
1f0271c036e1
Add test for memory leak reported in issue 9422.
Mark Dickinson <dickinsm@gmail.com>
parents:
63244
diff
changeset
|
570 s.__init__('ii') |
|
48321
f6726f32ef70
Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47750
diff
changeset
|
571 |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
78312
diff
changeset
|
572 def check_sizeof(self, format_str, number_of_codes): |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
78312
diff
changeset
|
573 # The size of 'PyStructObject' |
| 78316 | 574 totalsize = support.calcobjsize('2n3P') |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
78312
diff
changeset
|
575 # The size taken up by the 'formatcode' dynamic array |
|
83807
6707637f68ca
Issue #14596: The struct.Struct() objects now use more compact implementation.
Serhiy Storchaka <storchaka@gmail.com>
parents:
83524
diff
changeset
|
576 totalsize += struct.calcsize('P3n0P') * (number_of_codes + 1) |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
78312
diff
changeset
|
577 support.check_sizeof(self, struct.Struct(format_str), totalsize) |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
78312
diff
changeset
|
578 |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
78312
diff
changeset
|
579 @support.cpython_only |
|
78312
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
580 def test__sizeof__(self): |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
581 for code in integer_codes: |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
582 self.check_sizeof(code, 1) |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
583 self.check_sizeof('BHILfdspP', 9) |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
584 self.check_sizeof('B' * 1234, 1234) |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
585 self.check_sizeof('fd', 2) |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
586 self.check_sizeof('xxxxxxxxxxxxxx', 0) |
|
83807
6707637f68ca
Issue #14596: The struct.Struct() objects now use more compact implementation.
Serhiy Storchaka <storchaka@gmail.com>
parents:
83524
diff
changeset
|
587 self.check_sizeof('100H', 1) |
|
78312
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
588 self.check_sizeof('187s', 1) |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
589 self.check_sizeof('20p', 1) |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
590 self.check_sizeof('0s', 1) |
|
97dd2090a36c
Issue #15402: Simplify Struct.__sizeof__ and make tests more precise.
Meador Inge <meadori@gmail.com>
parents:
78259
diff
changeset
|
591 self.check_sizeof('0c', 0) |
|
78256
3e7b517e1b68
Issue #15402: Add a __sizeof__ method to struct.Struct.
Meador Inge <meadori@gmail.com>
parents:
68586
diff
changeset
|
592 |
|
83524
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
593 |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
594 class UnpackIteratorTest(unittest.TestCase): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
595 """ |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
596 Tests for iterative unpacking (struct.Struct.iter_unpack). |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
597 """ |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
598 |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
599 def test_construct(self): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
600 def _check_iterator(it): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
601 self.assertIsInstance(it, abc.Iterator) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
602 self.assertIsInstance(it, abc.Iterable) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
603 s = struct.Struct('>ibcp') |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
604 it = s.iter_unpack(b"") |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
605 _check_iterator(it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
606 it = s.iter_unpack(b"1234567") |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
607 _check_iterator(it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
608 # Wrong bytes length |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
609 with self.assertRaises(struct.error): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
610 s.iter_unpack(b"123456") |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
611 with self.assertRaises(struct.error): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
612 s.iter_unpack(b"12345678") |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
613 # Zero-length struct |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
614 s = struct.Struct('>') |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
615 with self.assertRaises(struct.error): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
616 s.iter_unpack(b"") |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
617 with self.assertRaises(struct.error): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
618 s.iter_unpack(b"12") |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
619 |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
620 def test_iterate(self): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
621 s = struct.Struct('>IB') |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
622 b = bytes(range(1, 16)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
623 it = s.iter_unpack(b) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
624 self.assertEqual(next(it), (0x01020304, 5)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
625 self.assertEqual(next(it), (0x06070809, 10)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
626 self.assertEqual(next(it), (0x0b0c0d0e, 15)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
627 self.assertRaises(StopIteration, next, it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
628 self.assertRaises(StopIteration, next, it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
629 |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
630 def test_arbitrary_buffer(self): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
631 s = struct.Struct('>IB') |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
632 b = bytes(range(1, 11)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
633 it = s.iter_unpack(memoryview(b)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
634 self.assertEqual(next(it), (0x01020304, 5)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
635 self.assertEqual(next(it), (0x06070809, 10)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
636 self.assertRaises(StopIteration, next, it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
637 self.assertRaises(StopIteration, next, it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
638 |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
639 def test_length_hint(self): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
640 lh = operator.length_hint |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
641 s = struct.Struct('>IB') |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
642 b = bytes(range(1, 16)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
643 it = s.iter_unpack(b) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
644 self.assertEqual(lh(it), 3) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
645 next(it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
646 self.assertEqual(lh(it), 2) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
647 next(it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
648 self.assertEqual(lh(it), 1) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
649 next(it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
650 self.assertEqual(lh(it), 0) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
651 self.assertRaises(StopIteration, next, it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
652 self.assertEqual(lh(it), 0) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
653 |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
654 def test_module_func(self): |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
655 # Sanity check for the global struct.iter_unpack() |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
656 it = struct.iter_unpack('>IB', bytes(range(1, 11))) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
657 self.assertEqual(next(it), (0x01020304, 5)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
658 self.assertEqual(next(it), (0x06070809, 10)) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
659 self.assertRaises(StopIteration, next, it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
660 self.assertRaises(StopIteration, next, it) |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
661 |
|
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
662 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
663 def test_main(): |
|
83524
d232cff25bbd
Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking.
Antoine Pitrou <solipsis@pitrou.net>
parents:
81039
diff
changeset
|
664 support.run_unittest(__name__) |
|
40737
6ebad2a6b990
Merged revisions 53451-53537 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40644
diff
changeset
|
665 |
|
47750
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
666 if __name__ == '__main__': |
|
f64996760984
Merged revisions 64089,64098,64100-64102,64113,64115-64116,64118,64120,64132,64342 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47201
diff
changeset
|
667 test_main() |
