def test_transform_not_none(): def transform(x): return x + 2 intended = map(transform, [e for e in elems if e is not None]) use = Piper()[:transform:] assert list(use.run(elems)) == list(intended)
def test_transform_if_keeping_none(): numbers = [1, 2, 3, 4, None, 5, 6, 7, 8] def transform(x): return x + 2 intended = [transform(x) if x is not None else x for x in numbers] use = Piper()[:transform:lambda x: None] assert list(use.run(numbers)) == list(intended)
def test_transform_if_even(): numbers = [1, 2, 3, 4, 5, 6, 7, 8] def transform(x): return x + 2 def condition(x): return x % 2 == 0 intended = [transform(x) for x in numbers if condition(x)] use = Piper()[condition:transform:] assert list(use.run(numbers)) == list(intended)
def test_transform_if_even_odds_are_none(): numbers = [1, 2, 3, 4, 5, 6, 7, 8] def transform(x): return x + 2 def condition(x): return x % 2 == 0 intended = [transform(x) if condition(x) else None for x in numbers] use = Piper()[condition:transform:lambda x: None] assert list(use.run(numbers)) == list(intended)
def test_transform_if(): numbers = [1, 2, 3, 4, 5, 6, 7, 8] def transform(x): return x + 2 def condition(x): return x < 6 intended = map(transform, filter(condition, numbers)) use = Piper()[condition:transform:] assert list(use.run(numbers)) == list(intended)
def test_transform_rails(): numbers = [1, 2, 3, 4, 5, 6, 7, 8] def transform(x): return x + 2 def condition(x): return x < 6 def negative_transform(x): return "faulty {}".format(x) intended = [ transform(x) if condition(x) else negative_transform(x) for x in numbers ] use = Piper()[condition:transform:negative_transform] assert list(use.run(numbers)) == list(intended)
def test_fizzbuzz3(): v = list((Piper()[lambda x: isinstance(x, int):(lambda x: (x, ""))] [lambda x: x[0] % 3 != 0::lambda x: (x[0], x[1] + "fizz")] [lambda x: x[0] % 5 != 0::lambda x: (x[0], x[1] + "buzz")]).run( [1, 2, None, 3, 4, None, 5])) print(v) for observed, expected in zip(v, [1, 2, 3, 4, 5]): assert observed[0] == expected if expected % 3 == 0: assert "fizz" in observed[1] if expected % 5 == 0: assert "buzz" in observed[1]
def test_match_int2(): class TA(int): pass class TB(int): pass class TC(int): pass sequence = [TA(0), TB(0), TC(0), 0, None] p = (Piper()[int::lambda x: x + 1, TA::lambda x: x + 2, TB::lambda x: x + 3, TC::lambda x: x + 4, int::lambda x: x + 5, ][::]) sequence = [TA(0), TB(0), TC(0), 0, "lol"] expected_output = [2, 3, 4, 1] observed = list(p.run(sequence)) assert observed == expected_output
def test_match_int_with_default(): class TA(int): pass class TB(int): pass class TC(int): pass sequence = [TA(0), TB(0), TC(0), 0, None] p = (Piper()[int::lambda x: x + 1, TA::lambda x: x + 2, TB::lambda x: x + 3, TC::lambda x: x + 4, int::lambda x: x + 5, ::lambda x: str(x)]) sequence = [TA(0), TB(0), TC(0), 0, "lol", 3.3] expected_output = [2, 3, 4, 1, "lol", "3.3"] observed = list(p.run(sequence)) assert observed == expected_output
def test_match_int_with_condition(): class TA(int): pass class TB(int): pass class TC(int): pass sequence = [TA(0), TB(0), TC(0), 0, None] p = (Piper()[int:lambda x: x > 4:100, TA::lambda x: x + 2, TB::lambda x: x + 3, TC::lambda x: x + 4, int::lambda x: -100, ]) sequence = [TA(0), TB(0), TC(0), 2, 9, "lol", None] expected_output = [2, 3, 4, -100, 100, None, None] observed = list(p.run(sequence)) assert observed == expected_output
def test_match_int_with_condition_and_default(): class TA(int): pass class TB(int): pass class TC(int): pass p = (Piper()[int:lambda x: x > 4:100, TA::lambda x: x + 2, TB::lambda x: x + 3, TC::lambda x: x + 4, int::lambda x: -100, str::42, :lambda x: hasattr(x, "__add__"):64, ::314]) sequence, expected_output = zip( *[(TA(0), 2), (TB(0), 3), (TC(0), 4), (2, -100), (9, 100), ("lol", 42), (None, 314), (3.7, 64)]) sequence = list(sequence) expected_output = list(expected_output) observed = list(p.run(sequence)) assert observed == expected_output
def test_filter_out_none(): assert list(Piper()[::].run(elems)) == [x for x in elems if x is not None]
def test_transform2_none(): intended = [x if x is not None else "muoio" for x in elems] use = Piper()[::lambda x: "muoio"] assert list(use.run(elems)) == intended
def test_fizzbuzz1(): v = list((Piper()[lambda x: isinstance(x, int)::]).run( [1, 2, None, 3, 4, None, 5])) assert v == [1, 2, 3, 4, 5]
def test_fizzbuzz0(): v = list((Piper()).run([1, 2, 3, 4, 5])) assert v == [1, 2, 3, 4, 5]
def test_fizzbuzz2(): v = list((Piper()[lambda x: isinstance(x, int):(lambda x: (x, ""))]).run( [1, 2, None, 3, 4, None, 5])) assert v == [(i, "") for i in [1, 2, 3, 4, 5]]