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_sort_with_key(self): sorter = fun.sort(lambda x: x[1]) result = sorter([(1, "b"), (2, "a"), (3, "c")]) self.assertEqual(list(result), [(2, "a"), (1, "b"), (3, "c")])
def test_sort_in_reverse_with_tuples(self): sorter = fun.sort(reverse=True) result = sorter([('key3', 1), ('key1', 2), ('key2', 3)]) self.assertEqual(list(result), [('key3', 1), ('key2', 3), ('key1', 2)])
def test_sort_in_reverse(self): sorter = fun.sort(reverse=True) result = sorter([2, 4, 3, 1]) self.assertEqual(list(result), [4, 3, 2, 1])
def test_sort_with_defaults_and_tuples(self): sorter = fun.sort() result = sorter([('key3', 1), ('key1', 2), ('key2', 3)]) self.assertEqual(list(result), [('key1', 2), ('key2', 3), ('key3', 1)])
def test_sort_with_defaults(self): sorter = fun.sort() result = sorter([2, 4, 3, 1]) self.assertEqual(list(result), [1, 2, 3, 4])