MCPcopy Index your code
hub / github.com/python/cpython / test_tee_recipe

Method test_tee_recipe

Lib/test/test_itertools.py:1842–2005  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 14

listClass · 0.85
irangeFunction · 0.85
lzipFunction · 0.85
takeFunction · 0.85
shuffleMethod · 0.80
assertTrueMethod · 0.80
proxyMethod · 0.80
repeatFunction · 0.50
anyFunction · 0.50
assertEqualMethod · 0.45
appendMethod · 0.45
assertRaisesMethod · 0.45

Tested by

no test coverage detected