(self)
| 636 | |
| 637 | # Test zip()'s use of iterators. |
| 638 | def test_builtin_zip(self): |
| 639 | self.assertEqual(list(zip()), []) |
| 640 | self.assertEqual(list(zip(*[])), []) |
| 641 | self.assertEqual(list(zip(*[(1, 2), 'ab'])), [(1, 'a'), (2, 'b')]) |
| 642 | |
| 643 | self.assertRaises(TypeError, zip, None) |
| 644 | self.assertRaises(TypeError, zip, range(10), 42) |
| 645 | self.assertRaises(TypeError, zip, range(10), zip) |
| 646 | |
| 647 | self.assertEqual(list(zip(IteratingSequenceClass(3))), |
| 648 | [(0,), (1,), (2,)]) |
| 649 | self.assertEqual(list(zip(SequenceClass(3))), |
| 650 | [(0,), (1,), (2,)]) |
| 651 | |
| 652 | d = {"one": 1, "two": 2, "three": 3} |
| 653 | self.assertEqual(list(d.items()), list(zip(d, d.values()))) |
| 654 | |
| 655 | # Generate all ints starting at constructor arg. |
| 656 | class IntsFrom: |
| 657 | def __init__(self, start): |
| 658 | self.i = start |
| 659 | |
| 660 | def __iter__(self): |
| 661 | return self |
| 662 | |
| 663 | def __next__(self): |
| 664 | i = self.i |
| 665 | self.i = i+1 |
| 666 | return i |
| 667 | |
| 668 | f = open(TESTFN, "w", encoding="utf-8") |
| 669 | try: |
| 670 | f.write("a\n" "bbb\n" "cc\n") |
| 671 | finally: |
| 672 | f.close() |
| 673 | f = open(TESTFN, "r", encoding="utf-8") |
| 674 | try: |
| 675 | self.assertEqual(list(zip(IntsFrom(0), f, IntsFrom(-100))), |
| 676 | [(0, "a\n", -100), |
| 677 | (1, "bbb\n", -99), |
| 678 | (2, "cc\n", -98)]) |
| 679 | finally: |
| 680 | f.close() |
| 681 | try: |
| 682 | unlink(TESTFN) |
| 683 | except OSError: |
| 684 | pass |
| 685 | |
| 686 | self.assertEqual(list(zip(range(5))), [(i,) for i in range(5)]) |
| 687 | |
| 688 | # Classes that lie about their lengths. |
| 689 | class NoGuessLen5: |
| 690 | def __getitem__(self, i): |
| 691 | if i >= 5: |
| 692 | raise IndexError |
| 693 | return i |
| 694 | |
| 695 | class Guess3Len5(NoGuessLen5): |
nothing calls this directly
no test coverage detected