Skip to content
Snippets Groups Projects
Commit 6b8faf57 authored by Piotr Maślanka's avatar Piotr Maślanka
Browse files

extend hint_with_length

parent 9c362326
No related branches found
No related tags found
No related merge requests found
# v2.7.35 # v2.7.35
* enabled `hint_with_length` to take generator-creating
functions as argument
__version__ = '2.7.35_a1' __version__ = '2.7.35_a2'
...@@ -78,6 +78,15 @@ class hint_with_length: ...@@ -78,6 +78,15 @@ class hint_with_length:
self.generator = generator self.generator = generator
self.length = length self.length = length
def __call__(self, *args, **kwargs):
return hint_with_length(self.generator(*args, **kwargs), self.length)
def close(self):
return self.generator.close()
def send(self, obj):
return self.generator.send(obj)
def __iter__(self): def __iter__(self):
return self.generator return self.generator
......
...@@ -10,24 +10,9 @@ class TestIterators(unittest.TestCase): ...@@ -10,24 +10,9 @@ class TestIterators(unittest.TestCase):
for i in range(1000): for i in range(1000):
yield i yield i
g = hint_with_length(generator(), 1000) g = hint_with_length(generator, 1000)()
self.assertEqual(g.__length_hint__(), 1000) self.assertEqual(g.__length_hint__(), 1000)
@unittest.skipUnless(sys.implementation.name == 'cpython', 'Not CPython, this needs deterministic GC')
def test_self_closing_generator(self):
a = {'done': False}
def generator():
for i in range(5):
yield i
a['done'] = True
for i in SelfClosingGenerator(generator()):
if i == 2:
break
self.assertTrue(a['done'])
@unittest.skipUnless(sys.implementation.name == 'cpython', 'Not CPython, this needs deterministic GC') @unittest.skipUnless(sys.implementation.name == 'cpython', 'Not CPython, this needs deterministic GC')
def test_self_closing_generator_function(self): def test_self_closing_generator_function(self):
a = {'done': False} a = {'done': False}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment