def test09pipeline_00noop(self): ''' Run a single stage one to one no-op pipeline. ''' with Later(1) as L: items = ['a', 'b', 'c', 'g', 'f', 'e'] P = pipeline(L, [(FUNC_ONE_TO_ONE, lambda x: x)], items) result = list(P.outQ) self.assertEqual(items, result)
def test09pipeline_01idenitity(self): ''' Run a single stage one to many no-op pipeline. ''' L = self.L items = ['a', 'b', 'c', 'g', 'f', 'e'] def func(x): yield x P = pipeline(L, [(FUNC_ONE_TO_MANY, func)], items) self.assertIsNot(P.outQ, items) result = list(P.outQ) self.assertEqual(items, result)
def test09pipeline_03a_sort(self): ''' Run a single stage many to many pipeline doing a sort. ''' L = self.L items = ['a', 'b', 'c', 'g', 'f', 'e'] expected = ['a', 'b', 'c', 'e', 'f', 'g'] def func(x): return sorted(x) P = pipeline(L, [(FUNC_MANY_TO_MANY, func)], items) self.assertIsNot(P.outQ, items) result = list(P.outQ) self.assertEqual(result, expected)
def test09pipeline_03b_set(self): ''' Run a single stage man to many pipeline. ''' L = self.L items = ['a', 'b', 'c', 'g', 'f', 'e'] expected = ['a', 'b', 'c', 'e', 'f', 'g'] def func(x): return set(x) P = pipeline(L, [(FUNC_MANY_TO_MANY, func)], items) self.assertIsNot(P.outQ, items) result = set(P.outQ) self.assertEqual(result, set(items))
def test09pipeline_04select(self): ''' Run a single stage selection pipeline. ''' L = self.L items = ['a', 'b', 'c', 'g', 'f', 'e'] want = ('a', 'f', 'c') expected = ['a', 'c', 'f'] def wanted(x): return x in want P = pipeline(L, [(FUNC_SELECTOR, wanted)], items) self.assertIsNot(P.outQ, items) result = list(P.outQ) self.assertEqual(result, expected)
def test09pipeline_02double(self): ''' Run a single stage one to many pipeline. ''' L = self.L items = ['a', 'b', 'c', 'g', 'f', 'e'] expected = ['a', 'a', 'b', 'b', 'c', 'c', 'g', 'g', 'f', 'f', 'e', 'e'] def func(x): yield x yield x P = pipeline(L, [(FUNC_ONE_TO_MANY, func)], items) self.assertIsNot(P.outQ, items) result = list(P.outQ) # values may be interleaved due to parallelism self.assertEqual(len(result), len(expected)) self.assertEqual(sorted(result), sorted(expected))
def test09pipeline_05two_by_two_by_sort(self): ''' Run a 3 stage pipeline with some fan out. ''' L = self.L items = ['a', 'b', 'c', 'g', 'f', 'e'] expected = [ 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'c', 'e', 'e', 'e', 'e', 'f', 'f', 'f', 'f', 'g', 'g', 'g', 'g', ] def double(x): yield x yield x P = pipeline(L, [(FUNC_ONE_TO_MANY, double), (FUNC_ONE_TO_MANY, double), (FUNC_MANY_TO_MANY, sorted)], items) self.assertIsNot(P.outQ, items) result = list(P.outQ) self.assertEqual(result, expected)