summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-12-03 19:33:25 (GMT)
committerGuido van Rossum <guido@python.org>2001-12-03 19:33:25 (GMT)
commitbb8f59a37148eb81ef1a1a26a6fb6e1e03583d12 (patch)
tree74f6920a0c94cd6522c8517bcf3ad003f52474e2 /Lib
parent2009aa66b4900fc11224318333be4b560f0820ce (diff)
downloadcpython-bb8f59a37148eb81ef1a1a26a6fb6e1e03583d12.zip
cpython-bb8f59a37148eb81ef1a1a26a6fb6e1e03583d12.tar.gz
cpython-bb8f59a37148eb81ef1a1a26a6fb6e1e03583d12.tar.bz2
unpack_iterable(): Add a missing DECREF in an error case. Reported by
Armin Rigo (SF bug #488477). Added a testcase to test_unpack_iter() in test_iter.py.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_iter.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py
index 5bd7ba4..13ed5bd 100644
--- a/Lib/test/test_iter.py
+++ b/Lib/test/test_iter.py
@@ -747,6 +747,29 @@ class TestCase(unittest.TestCase):
(a, b), (c,) = IteratingSequenceClass(2), {42: 24}
self.assertEqual((a, b, c), (0, 1, 42))
+ # Test reference count behavior
+
+ class C(object):
+ count = 0
+ def __new__(cls):
+ cls.count += 1
+ return object.__new__(cls)
+ def __del__(self):
+ cls = self.__class__
+ assert cls.count > 0
+ cls.count -= 1
+ x = C()
+ self.assertEqual(C.count, 1)
+ del x
+ self.assertEqual(C.count, 0)
+ l = [C(), C(), C()]
+ self.assertEqual(C.count, 3)
+ try:
+ a, b = iter(l)
+ except ValueError:
+ pass
+ del l
+ self.assertEqual(C.count, 0)
def test_main():
run_unittest(TestCase)