def test_chain(self): add_one = fun.map(lambda x: x + "1") upper = fun.map(str.upper) result = fun.chain( ["a", "b", "c", "d"], add_one, upper, list ) self.assertEqual(result, ["A1", "B1", "C1", "D1"]) big_transform = [add_one, upper] result = fun.chain( ["a", "b", "c", "d"], *big_transform, list ) self.assertEqual(result, ["A1", "B1", "C1", "D1"]) result = fun.chain( ["a", "b", "c", "d"], *big_transform, fun.filter(lambda x: x < "C1"), list ) self.assertEqual(result, ["A1", "B1"]) result = fun.chain( ["a", "b", "c", "d"], *big_transform, fun.sort(reverse=True), list ) self.assertEqual(result, ["D1", "C1", "B1", "A1"]) side_effects = [] save_value = fun.tap(side_effects.append) result = fun.chain( ["a", "b", "c", "d"], save_value, *big_transform, save_value, fun.sort(reverse=True), list ) self.assertEqual(result, ["D1", "C1", "B1", "A1"]) self.assertEqual(side_effects, [ ["a", "b", "c", "d"], ["A1", "B1", "C1", "D1"] ]) result = fun.chain( ["a", "b", "c", "d"], *big_transform, fun.reduce(lambda acc, x: acc + x), ) self.assertEqual(result, "A1B1C1D1")
def test_reduce(self): reducer = fun.reduce(TestDicts.collect_directions, []) result = reducer(self.data.items()) self.assertTrue(("rover1", "N") in result) self.assertTrue(("rover2", "W") in result) self.assertEqual(len(result), 2)
def test_boop(self): data = { 'beep': 1, 'boop': 2, 'buup': 3, } add_one = fun.map(lambda k, v: (k, v + 1)) evens = fun.filter(lambda k, v: v % 2 == 0) beep_buup = fun.reduce(lambda acc, k, v: f'{acc}{k}{v}', '') result = fun.chain(data.items(), add_one, evens, add_one, beep_buup) self.assertEqual(result, 'beep3buup5')
def test_reduce_with_tuples(self): reducer = fun.reduce(lambda acc, k, v: acc + k + v, 0) result = reducer([(1, 2), (3, 4)]) self.assertEqual(result, 10)
def test_reduce_with_initial_value(self): reducer = fun.reduce(lambda acc, x: acc + x, 4) result = reducer([1, 2, 3]) self.assertEqual(result, 10)
def test_reduce(self): reducer = fun.reduce(lambda acc, x: acc + x) result = reducer([1, 2, 3]) self.assertEqual(result, 6)