Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_tuple.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 | d3afe5d8a4da |
| children |
| rev | line source |
|---|---|
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
1 from test import support, seq_tests |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
2 |
|
52291
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
3 import gc |
|
76091
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
4 import pickle |
|
52291
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
5 |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
6 class TupleTest(seq_tests.CommonTest): |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
7 type2test = tuple |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
8 |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
9 def test_constructors(self): |
|
67850
b21786419bb8
Merged revisions 86236,86240,86332,86340,87271,87273,87447 via svnmerge from
Éric Araujo <merwok@netwok.org>
parents:
57667
diff
changeset
|
10 super().test_constructors() |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
11 # calling built-in types without argument must return empty |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
12 self.assertEqual(tuple(), ()) |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
13 t0_3 = (0, 1, 2, 3) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
14 t0_3_bis = tuple(t0_3) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
52291
diff
changeset
|
15 self.assertTrue(t0_3 is t0_3_bis) |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
16 self.assertEqual(tuple([]), ()) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
17 self.assertEqual(tuple([0, 1, 2, 3]), (0, 1, 2, 3)) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
18 self.assertEqual(tuple(''), ()) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
19 self.assertEqual(tuple('spam'), ('s', 'p', 'a', 'm')) |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
20 |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
21 def test_truth(self): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41642
diff
changeset
|
22 super().test_truth() |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
52291
diff
changeset
|
23 self.assertTrue(not ()) |
|
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
52291
diff
changeset
|
24 self.assertTrue((42, )) |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
25 |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
26 def test_len(self): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41642
diff
changeset
|
27 super().test_len() |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
28 self.assertEqual(len(()), 0) |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
29 self.assertEqual(len((0,)), 1) |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
30 self.assertEqual(len((0, 1, 2)), 3) |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
31 |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
32 def test_iadd(self): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41642
diff
changeset
|
33 super().test_iadd() |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
34 u = (0, 1) |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
35 u2 = u |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
36 u += (2, 3) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
52291
diff
changeset
|
37 self.assertTrue(u is not u2) |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
38 |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
39 def test_imul(self): |
|
42084
229c28cb9afb
Merged revisions 55817-55961 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41642
diff
changeset
|
40 super().test_imul() |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
41 u = (0, 1) |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
42 u2 = u |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
43 u *= 3 |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
52291
diff
changeset
|
44 self.assertTrue(u is not u2) |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
45 |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
46 def test_tupleresizebug(self): |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
47 # Check that a specific bug in _PyTuple_Resize() is squashed. |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
48 def f(): |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
49 for i in range(1000): |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
50 yield i |
|
41642
a6eb6acfe04a
Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
39656
diff
changeset
|
51 self.assertEqual(list(tuple(f())), list(range(1000))) |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
52 |
|
32171
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
53 def test_hash(self): |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
54 # See SF bug 942952: Weakness in tuple hash |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
55 # The hash should: |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
56 # be non-commutative |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
57 # should spread-out closely spaced values |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
58 # should not exhibit cancellation in tuples like (x,(x,y)) |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
59 # should be distinct from element hashes: hash(x)!=hash((x,)) |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
60 # This test exercises those cases. |
|
32178
041f89c98c35
test_hash(): The test here is different enough from the one in the bug
Tim Peters <tim.peters@gmail.com>
parents:
32171
diff
changeset
|
61 # For a pure random hash and N=50, the expected number of occupied |
|
041f89c98c35
test_hash(): The test here is different enough from the one in the bug
Tim Peters <tim.peters@gmail.com>
parents:
32171
diff
changeset
|
62 # buckets when tossing 252,600 balls into 2**32 buckets |
|
041f89c98c35
test_hash(): The test here is different enough from the one in the bug
Tim Peters <tim.peters@gmail.com>
parents:
32171
diff
changeset
|
63 # is 252,592.6, or about 7.4 expected collisions. The |
|
041f89c98c35
test_hash(): The test here is different enough from the one in the bug
Tim Peters <tim.peters@gmail.com>
parents:
32171
diff
changeset
|
64 # standard deviation is 2.73. On a box with 64-bit hash |
|
041f89c98c35
test_hash(): The test here is different enough from the one in the bug
Tim Peters <tim.peters@gmail.com>
parents:
32171
diff
changeset
|
65 # codes, no collisions are expected. Here we accept no |
|
041f89c98c35
test_hash(): The test here is different enough from the one in the bug
Tim Peters <tim.peters@gmail.com>
parents:
32171
diff
changeset
|
66 # more than 15 collisions. Any worse and the hash function |
|
041f89c98c35
test_hash(): The test here is different enough from the one in the bug
Tim Peters <tim.peters@gmail.com>
parents:
32171
diff
changeset
|
67 # is sorely suspect. |
|
32171
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
68 |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
69 N=50 |
|
41642
a6eb6acfe04a
Merged revisions 55007-55179 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
39656
diff
changeset
|
70 base = list(range(N)) |
|
32171
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
71 xp = [(i, j) for i in base for j in base] |
|
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
72 inps = base + [(i, j) for i in base for j in xp] + \ |
|
39656
08005ba6ceb9
Make built-in zip() equal to itertools.izip().
Guido van Rossum <guido@python.org>
parents:
33629
diff
changeset
|
73 [(i, j) for i in xp for j in base] + xp + list(zip(base)) |
|
32171
97b908a9971a
SF bug #942952: Weakness in tuple hash
Raymond Hettinger <python@rcn.com>
parents:
31159
diff
changeset
|
74 collisions = len(inps) - len(set(map(hash, inps))) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
52291
diff
changeset
|
75 self.assertTrue(collisions <= 15) |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
76 |
|
33629
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
77 def test_repr(self): |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
78 l0 = tuple() |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
79 l2 = (0, 1, 2) |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
80 a0 = self.type2test(l0) |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
81 a2 = self.type2test(l2) |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
82 |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
83 self.assertEqual(str(a0), repr(l0)) |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
84 self.assertEqual(str(a2), repr(l2)) |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
85 self.assertEqual(repr(a0), "()") |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
86 self.assertEqual(repr(a2), "(0, 1, 2)") |
|
c84dbe717d49
Improve test coverage.
Raymond Hettinger <python@rcn.com>
parents:
32178
diff
changeset
|
87 |
|
52291
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
88 def _not_tracked(self, t): |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
89 # Nested tuples can take several collections to untrack |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
90 gc.collect() |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
91 gc.collect() |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
92 self.assertFalse(gc.is_tracked(t), t) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
93 |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
94 def _tracked(self, t): |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
95 self.assertTrue(gc.is_tracked(t), t) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
96 gc.collect() |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
97 gc.collect() |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
98 self.assertTrue(gc.is_tracked(t), t) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
99 |
|
62573
aa262c5b18b5
Merged revisions 82303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57667
diff
changeset
|
100 @support.cpython_only |
|
52291
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
101 def test_track_literals(self): |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
102 # Test GC-optimization of tuple literals |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
103 x, y, z = 1.5, "a", [] |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
104 |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
105 self._not_tracked(()) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
106 self._not_tracked((1,)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
107 self._not_tracked((1, 2)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
108 self._not_tracked((1, 2, "a")) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
109 self._not_tracked((1, 2, (None, True, False, ()), int)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
110 self._not_tracked((object(),)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
111 self._not_tracked(((1, x), y, (2, 3))) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
112 |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
113 # Tuples with mutable elements are always tracked, even if those |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
114 # elements are not tracked right now. |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
115 self._tracked(([],)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
116 self._tracked(([1],)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
117 self._tracked(({},)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
118 self._tracked((set(),)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
119 self._tracked((x, y, z)) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
120 |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
121 def check_track_dynamic(self, tp, always_track): |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
122 x, y, z = 1.5, "a", [] |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
123 |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
124 check = self._tracked if always_track else self._not_tracked |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
125 check(tp()) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
126 check(tp([])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
127 check(tp(set())) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
128 check(tp([1, x, y])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
129 check(tp(obj for obj in [1, x, y])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
130 check(tp(set([1, x, y]))) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
131 check(tp(tuple([obj]) for obj in [1, x, y])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
132 check(tuple(tp([obj]) for obj in [1, x, y])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
133 |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
134 self._tracked(tp([z])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
135 self._tracked(tp([[x, y]])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
136 self._tracked(tp([{x: y}])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
137 self._tracked(tp(obj for obj in [x, y, z])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
138 self._tracked(tp(tuple([obj]) for obj in [x, y, z])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
139 self._tracked(tuple(tp([obj]) for obj in [x, y, z])) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
140 |
|
62573
aa262c5b18b5
Merged revisions 82303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57667
diff
changeset
|
141 @support.cpython_only |
|
52291
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
142 def test_track_dynamic(self): |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
143 # Test GC-optimization of dynamically constructed tuples. |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
144 self.check_track_dynamic(tuple, False) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
145 |
|
62573
aa262c5b18b5
Merged revisions 82303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57667
diff
changeset
|
146 @support.cpython_only |
|
52291
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
147 def test_track_subtypes(self): |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
148 # Tuple subtypes must always be tracked |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
149 class MyTuple(tuple): |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
150 pass |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
151 self.check_track_dynamic(MyTuple, True) |
|
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
152 |
|
62573
aa262c5b18b5
Merged revisions 82303 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57667
diff
changeset
|
153 @support.cpython_only |
|
57667
79e0dbb6c4b8
Merged revisions 76764 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
154 def test_bug7466(self): |
|
79e0dbb6c4b8
Merged revisions 76764 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
155 # Trying to untrack an unfinished tuple could crash Python |
|
79e0dbb6c4b8
Merged revisions 76764 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
55593
diff
changeset
|
156 self._not_tracked(tuple(gc.collect() for i in range(101))) |
|
52291
94bd0666ffa7
Merged revisions 70546 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47201
diff
changeset
|
157 |
|
72755
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
158 def test_repr_large(self): |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
159 # Check the repr of large list objects |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
160 def check(n): |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
161 l = (0,) * n |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
162 s = repr(l) |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
163 self.assertEqual(s, |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
164 '(' + ', '.join(['0'] * n) + ')') |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
165 check(10) # check our checking code |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
166 check(1000000) |
|
f9f782f2369e
Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
167 |
|
76091
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
168 def test_iterator_pickle(self): |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
169 # Userlist iterators don't support pickling yet since |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
170 # they are based on generators. |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
171 data = self.type2test([4, 5, 6, 7]) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
172 itorg = iter(data) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
173 d = pickle.dumps(itorg) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
174 it = pickle.loads(d) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
175 self.assertEqual(type(itorg), type(it)) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
176 self.assertEqual(self.type2test(it), self.type2test(data)) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
177 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
178 it = pickle.loads(d) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
179 next(it) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
180 d = pickle.dumps(it) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
181 self.assertEqual(self.type2test(it), self.type2test(data)[1:]) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
182 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
183 def test_reversed_pickle(self): |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
184 data = self.type2test([4, 5, 6, 7]) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
185 itorg = reversed(data) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
186 d = pickle.dumps(itorg) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
187 it = pickle.loads(d) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
188 self.assertEqual(type(itorg), type(it)) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
189 self.assertEqual(self.type2test(it), self.type2test(reversed(data))) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
190 |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
191 it = pickle.loads(d) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
192 next(it) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
193 d = pickle.dumps(it) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
194 self.assertEqual(self.type2test(it), self.type2test(reversed(data))[1:]) |
|
4ff234337e24
Issue #14288: Serialization support for builtin iterators.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
72755
diff
changeset
|
195 |
|
78366
2638ce032151
Issue #8847: Disable COMDAT folding in Windows PGO builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
72755
diff
changeset
|
196 def test_no_comdat_folding(self): |
|
2638ce032151
Issue #8847: Disable COMDAT folding in Windows PGO builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
72755
diff
changeset
|
197 # Issue 8847: In the PGO build, the MSVC linker's COMDAT folding |
|
2638ce032151
Issue #8847: Disable COMDAT folding in Windows PGO builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
72755
diff
changeset
|
198 # optimization causes failures in code that relies on distinct |
|
2638ce032151
Issue #8847: Disable COMDAT folding in Windows PGO builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
72755
diff
changeset
|
199 # function addresses. |
|
2638ce032151
Issue #8847: Disable COMDAT folding in Windows PGO builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
72755
diff
changeset
|
200 class T(tuple): pass |
|
2638ce032151
Issue #8847: Disable COMDAT folding in Windows PGO builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
72755
diff
changeset
|
201 with self.assertRaises(TypeError): |
|
2638ce032151
Issue #8847: Disable COMDAT folding in Windows PGO builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
72755
diff
changeset
|
202 [3,] + T((1,2)) |
|
2638ce032151
Issue #8847: Disable COMDAT folding in Windows PGO builds.
Martin v. Löwis <martin@v.loewis.de>
parents:
72755
diff
changeset
|
203 |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
204 def test_main(): |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
205 support.run_unittest(TupleTest) |
|
31159
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
206 |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
207 if __name__=="__main__": |
|
e1f1fb74451b
Move list and tuple tests from test_types.py to their own scripts:
Walter Dörwald <walter@livinglogic.de>
parents:
diff
changeset
|
208 test_main() |
