Esempio n. 1
0
 def _test_flow(self, join_type, fork_type):
     join_chain = (produce([1, 1, 1]), produce([2, 2, 2])) >> join_type()
     self.assertEqual(list(join_chain), [3, 3, 3])
     fork_chain = produce([1, 1, 1]) >> fork_type()
     self.assertEqual(list(fork_chain), [[1], [1], [1]])
     fork_join_chain = produce([1, 1, 1]) >> fork_type() >> join_type()
     self.assertEqual(list(fork_join_chain), [1, 1, 1])
Esempio n. 2
0
 def test_abort(self):
     """Abort in nested fork"""
     elements = [Adder(val) for val in (0, -2, -1E6)]
     for elements in itertools.product(elements, repeat=3):
         with self.subTest(elements=elements):
             a, b, c = elements
             initials = (0, 15, -15, -1E6, +1E6, 0)
             chain_abort_one_swallow = produce(initials) >> a >> (b >> abort_swallow(), c)
             self.assertEqual(
                 list(chain_abort_one_swallow),
                 [[initial + a.value + c.value] for initial in initials]
             )
             chain_abort_all_swallow = produce(initials) >> a >> (b >> abort_swallow(), c >> abort_swallow())
             self.assertEqual(
                 list(chain_abort_all_swallow),
                 []
             )
             for every in (2, 3):
                 chain_switch_nth = produce(initials) >> a >> either(AbortEvery(every) >> b, c)
                 self.assertEqual(
                     list(chain_switch_nth),
                     [
                         initial + a.value + b.value
                         if (idx+1) % every else
                         initial + a.value + c.value
                         for idx, initial in enumerate(initials)
                     ]
                 )
                 chain_abort_nth_return = produce(initials) >> a >> (b >> AbortEvery(every), c)
                 self.assertEqual(
                     list(chain_abort_nth_return),
                     [
                         [initial + a.value + b.value, initial + a.value + c.value]
                         if (idx+1) % every else
                         [initial + a.value + c.value]
                         for idx, initial in enumerate(initials)
                     ]
                 )
                 chain_abort_nth_swallow = produce(initials) >> a >> (b >> ReturnEvery(every), c)
                 self.assertEqual(
                     list(chain_abort_nth_swallow),
                     [
                         [initial + a.value + c.value]
                         if (idx) % every else
                         [initial + a.value + b.value, initial + a.value + c.value]
                         for idx, initial in enumerate(initials)
                     ]
                 )
Esempio n. 3
0
 def test_drive_single(self):
     """Drive a single chain"""
     driver = self.driver_class()
     elements = [Adder(val) for val in (2, -2, 1E6, random.randint(-256, 256))]
     for run_async in (False, True):
         results = []
         self.assertFalse(driver.mounts)
         with self.subTest(run_async=run_async):
             for elements in itertools.product(elements, repeat=3):
                 initials = [0, 2, 1E6, -1232527]
                 expected = [initial + sum(element.value for element in elements) for initial in initials]
                 a, b, c = elements
                 buffer = self.buffer_class()
                 chain = produce(initials) >> a >> b >> c >> buffer
                 driver.mount(chain)
                 results.append([expected, buffer])
             if run_async:
                 driver.start()
                 driver.start()  # starting multiple times is allowed
                 time.sleep(0.05)  # let the driver startup
                 while driver.running:
                     time.sleep(0.05)
             else:
                 driver.run()
             for expected, buffer in results:
                 self.assertEqual(expected, buffer.buffer)
Esempio n. 4
0
 def factory():
     return produce(initials) >> a >> (b, c)
Esempio n. 5
0
 def factory():
     return produce(initials) >> a >> b >> c >> d >> e
Esempio n. 6
0
 def factory():
     return produce(initials) >> (a, b) >> MergeLink()