]> granicus.if.org Git - python/commitdiff
Optimize the test for issue #13454.
authorSerhiy Storchaka <storchaka@gmail.com>
Sat, 26 Jan 2013 09:53:17 +0000 (11:53 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Sat, 26 Jan 2013 09:53:17 +0000 (11:53 +0200)
Now it requires almost 4x less memory and is almost 2x faster.

1  2 
Lib/test/test_itertools.py

index efd50bae10e41cee76dffd5a1b8b4380cf26f3bb,dfa371e2b8665e8f98a6955d7b209c51f2e8a9df..53926a9df5cd0c13e2a0eb14d3f38b8aaf7b1f94
@@@ -1206,73 -930,10 +1206,71 @@@ class TestBasicOps(unittest.TestCase)
          del a
          self.assertRaises(ReferenceError, getattr, p, '__class__')
  
 +        ans = list('abc')
 +        long_ans = list(range(10000))
 +
 +        # check copy
 +        a, b = tee('abc')
 +        self.assertEqual(list(copy.copy(a)), ans)
 +        self.assertEqual(list(copy.copy(b)), ans)
 +        a, b = tee(list(range(10000)))
 +        self.assertEqual(list(copy.copy(a)), long_ans)
 +        self.assertEqual(list(copy.copy(b)), long_ans)
 +
 +        # check partially consumed copy
 +        a, b = tee('abc')
 +        take(2, a)
 +        take(1, b)
 +        self.assertEqual(list(copy.copy(a)), ans[2:])
 +        self.assertEqual(list(copy.copy(b)), ans[1:])
 +        self.assertEqual(list(a), ans[2:])
 +        self.assertEqual(list(b), ans[1:])
 +        a, b = tee(range(10000))
 +        take(100, a)
 +        take(60, b)
 +        self.assertEqual(list(copy.copy(a)), long_ans[100:])
 +        self.assertEqual(list(copy.copy(b)), long_ans[60:])
 +        self.assertEqual(list(a), long_ans[100:])
 +        self.assertEqual(list(b), long_ans[60:])
 +
 +        # check deepcopy
 +        a, b = tee('abc')
 +        self.assertEqual(list(copy.deepcopy(a)), ans)
 +        self.assertEqual(list(copy.deepcopy(b)), ans)
 +        self.assertEqual(list(a), ans)
 +        self.assertEqual(list(b), ans)
 +        a, b = tee(range(10000))
 +        self.assertEqual(list(copy.deepcopy(a)), long_ans)
 +        self.assertEqual(list(copy.deepcopy(b)), long_ans)
 +        self.assertEqual(list(a), long_ans)
 +        self.assertEqual(list(b), long_ans)
 +
 +        # check partially consumed deepcopy
 +        a, b = tee('abc')
 +        take(2, a)
 +        take(1, b)
 +        self.assertEqual(list(copy.deepcopy(a)), ans[2:])
 +        self.assertEqual(list(copy.deepcopy(b)), ans[1:])
 +        self.assertEqual(list(a), ans[2:])
 +        self.assertEqual(list(b), ans[1:])
 +        a, b = tee(range(10000))
 +        take(100, a)
 +        take(60, b)
 +        self.assertEqual(list(copy.deepcopy(a)), long_ans[100:])
 +        self.assertEqual(list(copy.deepcopy(b)), long_ans[60:])
 +        self.assertEqual(list(a), long_ans[100:])
 +        self.assertEqual(list(b), long_ans[60:])
 +
 +        # check pickle
 +        self.pickletest(iter(tee('abc')))
 +        a, b = tee('abc')
 +        self.pickletest(a, compare=ans)
 +        self.pickletest(b, compare=ans)
 +
      # Issue 13454: Crash when deleting backward iterator from tee()
      def test_tee_del_backward(self):
-         forward, backward = tee(range(20000000))
-         for i in forward:
-             pass
+         forward, backward = tee(repeat(None, 20000000))
+         any(forward)  # exhaust the iterator
          del backward
  
      def test_StopIteration(self):