def test_two_items_causes_completion(self): singular_sink = SingularSink() transduce(Transducer, sending(), [23, 78], init=singular_sink()) self.assertTrue(singular_sink.has_value)
def test_two_items_returns_two_element_list(self): collection = CollectingSink() transduce(Transducer, sending(), [23, 78], init=collection()) self.assertEqual(list(collection), [23, 78])
def test_zero_items_returns_initial_empty_collection(self): collection = CollectingSink() transduce(Transducer, sending(), empty_iter(), init=collection()) self.assertEqual(len(collection), 0)
def transduce(transducer, target=UNSET): reducer = transducer(sending()) accumulator = target if target is not UNSET else reducer.initial() try: while True: item = (yield) accumulator = reducer.step(accumulator, item) if isinstance(accumulator, Reduced): accumulator = accumulator.value break assert accumulator is target except GeneratorExit: pass assert accumulator is target return reducer.complete(accumulator)
def test_sending_to_non_sink_raises_attribute_error(self): with self.assertRaises(AttributeError): transduce(Transducer, sending(), (23, 78), init=set())