(self)
| 1840 | |
| 1841 | |
| 1842 | def test_tee_recipe(self): |
| 1843 | |
| 1844 | # Begin tee() recipe ########################################### |
| 1845 | |
| 1846 | def tee(iterable, n=2): |
| 1847 | if n < 0: |
| 1848 | raise ValueError |
| 1849 | if n == 0: |
| 1850 | return () |
| 1851 | iterator = _tee(iterable) |
| 1852 | result = [iterator] |
| 1853 | for _ in range(n - 1): |
| 1854 | result.append(_tee(iterator)) |
| 1855 | return tuple(result) |
| 1856 | |
| 1857 | class _tee: |
| 1858 | |
| 1859 | def __init__(self, iterable): |
| 1860 | it = iter(iterable) |
| 1861 | if isinstance(it, _tee): |
| 1862 | self.iterator = it.iterator |
| 1863 | self.link = it.link |
| 1864 | else: |
| 1865 | self.iterator = it |
| 1866 | self.link = [None, None] |
| 1867 | |
| 1868 | def __iter__(self): |
| 1869 | return self |
| 1870 | |
| 1871 | def __next__(self): |
| 1872 | link = self.link |
| 1873 | if link[1] is None: |
| 1874 | link[0] = next(self.iterator) |
| 1875 | link[1] = [None, None] |
| 1876 | value, self.link = link |
| 1877 | return value |
| 1878 | |
| 1879 | # End tee() recipe ############################################# |
| 1880 | |
| 1881 | n = 200 |
| 1882 | |
| 1883 | a, b = tee([]) # test empty iterator |
| 1884 | self.assertEqual(list(a), []) |
| 1885 | self.assertEqual(list(b), []) |
| 1886 | |
| 1887 | a, b = tee(irange(n)) # test 100% interleaved |
| 1888 | self.assertEqual(lzip(a,b), lzip(range(n), range(n))) |
| 1889 | |
| 1890 | a, b = tee(irange(n)) # test 0% interleaved |
| 1891 | self.assertEqual(list(a), list(range(n))) |
| 1892 | self.assertEqual(list(b), list(range(n))) |
| 1893 | |
| 1894 | a, b = tee(irange(n)) # test dealloc of leading iterator |
| 1895 | for i in range(100): |
| 1896 | self.assertEqual(next(a), i) |
| 1897 | del a |
| 1898 | self.assertEqual(list(b), list(range(n))) |
| 1899 |
nothing calls this directly
no test coverage detected