Пример #1
0
    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")
Пример #2
0
    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)
Пример #3
0
    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')
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    def test_reduce(self):
        reducer = fun.reduce(lambda acc, x: acc + x)

        result = reducer([1, 2, 3])

        self.assertEqual(result, 6)