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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()