Ejemplo n.º 1
0
    def test_two_items_causes_completion(self):
        singular_sink = SingularSink()

        transduce(Transducer,
                  sending(),
                  [23, 78],
                  init=singular_sink())

        self.assertTrue(singular_sink.has_value)
Ejemplo n.º 2
0
    def test_two_items_returns_two_element_list(self):
        collection = CollectingSink()

        transduce(Transducer,
                  sending(),
                  [23, 78],
                  init=collection())

        self.assertEqual(list(collection), [23, 78])
Ejemplo n.º 3
0
    def test_zero_items_returns_initial_empty_collection(self):
        collection = CollectingSink()

        transduce(Transducer,
                  sending(),
                  empty_iter(),
                  init=collection())

        self.assertEqual(len(collection), 0)
Ejemplo n.º 4
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)
Ejemplo n.º 5
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)
Ejemplo n.º 6
0
 def test_sending_to_non_sink_raises_attribute_error(self):
     with self.assertRaises(AttributeError):
         transduce(Transducer,
                   sending(),
                   (23, 78),
                   init=set())