Changeset 391 for python/trunk/Lib/test/test_iter.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/test/test_iter.py
r2 r391 2 2 3 3 import unittest 4 from test.test_support import run_unittest, TESTFN, unlink, have_unicode 4 from test.test_support import run_unittest, TESTFN, unlink, have_unicode, \ 5 check_py3k_warnings, cpython_only 5 6 6 7 # Test result of triple loop (too big to inline) … … 76 77 it = iter(seq) 77 78 it2 = iter(it) 78 self.assert _(it is it2)79 self.assertTrue(it is it2) 79 80 80 81 # Test that for loops over iterators work … … 120 121 def test_seq_class_iter(self): 121 122 self.check_iterator(iter(SequenceClass(10)), range(10)) 123 124 # Test a new_style class with __iter__ but no next() method 125 def test_new_style_iter_class(self): 126 class IterClass(object): 127 def __iter__(self): 128 return self 129 self.assertRaises(TypeError, iter, IterClass()) 122 130 123 131 # Test two-argument iter() with callable instance … … 390 398 # Test map()'s use of iterators. 391 399 def test_builtin_map(self): 392 self.assertEqual(map(None, SequenceClass(5)), range(5))393 400 self.assertEqual(map(lambda x: x+1, SequenceClass(5)), range(1, 6)) 394 401 395 402 d = {"one": 1, "two": 2, "three": 3} 396 self.assertEqual(map(None, d), d.keys())397 403 self.assertEqual(map(lambda k, d=d: (k, d[k]), d), d.items()) 398 404 dkeys = d.keys() … … 401 407 i < len(d) and dkeys[i] or None) 402 408 for i in range(5)] 403 self.assertEqual(map(None, d, 404 SequenceClass(5), 405 iter(d.iterkeys())), 406 expected) 409 410 # Deprecated map(None, ...) 411 with check_py3k_warnings(): 412 self.assertEqual(map(None, SequenceClass(5)), range(5)) 413 self.assertEqual(map(None, d), d.keys()) 414 self.assertEqual(map(None, d, 415 SequenceClass(5), 416 iter(d.iterkeys())), 417 expected) 407 418 408 419 f = open(TESTFN, "w") … … 500 511 501 512 # Test reduces()'s use of iterators. 502 def test_builtin_reduce(self): 513 def test_deprecated_builtin_reduce(self): 514 with check_py3k_warnings(): 515 self._test_builtin_reduce() 516 517 def _test_builtin_reduce(self): 503 518 from operator import add 504 519 self.assertEqual(reduce(add, SequenceClass(5)), 10) … … 560 575 for sc5 in IteratingSequenceClass(5), SequenceClass(5): 561 576 for i in range(5): 562 self.assert _(i insc5)577 self.assertIn(i, sc5) 563 578 for i in "abc", -1, 5, 42.42, (3, 4), [], {1: 1}, 3-12j, sc5: 564 self.assert _(i not insc5)579 self.assertNotIn(i, sc5) 565 580 566 581 self.assertRaises(TypeError, lambda: 3 in 12) … … 569 584 d = {"one": 1, "two": 2, "three": 3, 1j: 2j} 570 585 for k in d: 571 self.assert _(k ind)572 self.assert _(k not ind.itervalues())586 self.assertIn(k, d) 587 self.assertNotIn(k, d.itervalues()) 573 588 for v in d.values(): 574 self.assert _(v ind.itervalues())575 self.assert _(v not ind)589 self.assertIn(v, d.itervalues()) 590 self.assertNotIn(v, d) 576 591 for k, v in d.iteritems(): 577 self.assert _((k, v) ind.iteritems())578 self.assert _((v, k) not ind.iteritems())592 self.assertIn((k, v), d.iteritems()) 593 self.assertNotIn((v, k), d.iteritems()) 579 594 580 595 f = open(TESTFN, "w") … … 587 602 for chunk in "abc": 588 603 f.seek(0, 0) 589 self.assert _(chunk not inf)604 self.assertNotIn(chunk, f) 590 605 f.seek(0, 0) 591 self.assert _((chunk + "\n") inf)606 self.assertIn((chunk + "\n"), f) 592 607 finally: 593 608 f.close() … … 779 794 self.assertEqual((a, b, c), (0, 1, 42)) 780 795 781 # Test reference count behavior 782 796 797 @cpython_only 798 def test_ref_counting_behavior(self): 783 799 class C(object): 784 800 count = 0 … … 878 894 self.assertEqual(list(b), []) 879 895 896 def test_3720(self): 897 # Avoid a crash, when an iterator deletes its next() method. 898 class BadIterator(object): 899 def __iter__(self): 900 return self 901 def next(self): 902 del BadIterator.next 903 return 1 904 905 try: 906 for i in BadIterator() : 907 pass 908 except TypeError: 909 pass 910 911 def test_extending_list_with_iterator_does_not_segfault(self): 912 # The code to extend a list with an iterator has a fair 913 # amount of nontrivial logic in terms of guessing how 914 # much memory to allocate in advance, "stealing" refs, 915 # and then shrinking at the end. This is a basic smoke 916 # test for that scenario. 917 def gen(): 918 for i in range(500): 919 yield i 920 lst = [0] * 500 921 for i in range(240): 922 lst.pop(0) 923 lst.extend(gen()) 924 self.assertEqual(len(lst), 760) 925 880 926 881 927 def test_main():
Note:
See TracChangeset
for help on using the changeset viewer.