예제 #1
0
    def test_15(self):

        data = range(1, 10)

        _mult = Stream(data).collect(Reduce(bi_func=op.mul))

        self.assertTrue(_mult.present())
        self.assertEqual(_mult.get(), factorial(9))
예제 #2
0
    def test_14(self):

        data = range(10)

        _sum = Stream(data).collect(Reduce(bi_func=op.add))

        self.assertTrue(_sum.present())
        self.assertEqual(_sum.get(), sum(data))
예제 #3
0
    def test_cycle(self):
        out = Stream([4, 1, 2, 3, 9, 0, 5]).cycle(range(3)).collect(ToList())
        self.assertListEqual(out, [(4, 0), (1, 1), (2, 2), (3, 0), (9, 1),
                                   (0, 2), (5, 0)])

        out = Stream([4, 1, 2, 3, 9, 0,
                      5]).cycle(range(3), after=False).collect(ToList())
        self.assertListEqual(out, [(0, 4), (1, 1), (2, 2), (0, 3), (1, 9),
                                   (2, 0), (0, 5)])
예제 #4
0
    def test_map2(self):
        rnd = self.rnd
        a, b, size = 1, 100, 1000

        add_5 = lambda x: x + 5
        pow_3 = lambda x: x**3

        mod_2_not_zero = lambda x: x % 2 != 0
        mod_3_not_2 = lambda x: x % 3 != 2
        mod_5_not_4 = lambda x: x % 5 != 4

        out = (Stream(rnd.int_range_supplier(
            a, b)).limit(size).filter(mod_3_not_2).map(add_5).filter(
                mod_2_not_zero).map(pow_3).filter(mod_5_not_4).collect(
                    ToList()))

        rnd.reset()

        out_target = []

        for e in rnd.int_range(a, b, size=size):
            if mod_3_not_2(e):
                e = add_5(e)

                if mod_2_not_zero(e):
                    e = pow_3(e)

                    if mod_5_not_4(e):
                        out_target.append(e)

        self.assertListEqual(out, out_target)
예제 #5
0
파일: sort_test.py 프로젝트: ShivKJ/Stream
    def test_4(self):
        size = 10
        eps = 1e-9

        class Data:
            def __init__(self, e):
                self._e = e

            def e(self):
                return self._e

            def __eq__(self, other) -> bool:
                return abs(self._e - other._e) <= eps

        rnd = random()

        out = (Stream.from_supplier(rnd.random).limit(size).map(Data).sort(
            key=Data.e, reverse=True).collect(ToList()))

        rnd.reset()

        out_target = sorted((Data(rnd.random()) for _ in range(size)),
                            key=Data.e,
                            reverse=True)

        for o, t in zip(out, out_target):
            with self.subTest(o=o):
                self.assertAlmostEqual(o, t)
예제 #6
0
    def test_10(self):
        data = [1, 3, 1]

        def square(x):
            return x * x

        # Value Error will be thrown, because number '1' is present multiple times.
        # and we have not provided any "merger_on_conflict".
        Stream(data).collect(ToMap(identity, square))
예제 #7
0
    def test_9(self):
        data = range(10)

        def square(x):
            return x * x

        out = Stream(data).collect(ToMap(identity, square))
        out_target = {e: square(e) for e in data}

        self.assertDictEqual(out, out_target)
예제 #8
0
    def test_11(self):
        data = [1, 3, 1]

        def square(x):
            return x * x

        out = Stream(data).collect(
            ToMap(identity, square, merger_on_conflict=on_conflict_do_nothing))

        out_target = {1: 1, 3: 9}
        self.assertDictEqual(out, out_target)
예제 #9
0
    def test_1a(self):
        rnd = random()

        start, end = 1, 100
        size = 1000

        data = rnd.int_range(start, end, size=size)
        element_frequency = Stream(data).collect(
            GroupingBy(identity, Counting()))

        out_target = Counter(data)
        self.assertDictEqual(element_frequency, out_target)
예제 #10
0
    def test_map3(self):
        rnd = self.rnd
        a, b, size = 1, 100, 1000

        pow_2 = lambda x: x**2

        out = sum(Stream(rnd.int_range_supplier(a, b)).limit(size).map(pow_2))

        rnd.reset()

        out_target = sum(pow_2(e) for e in rnd.int_range(a, b, size=size))

        self.assertEqual(out, out_target)
예제 #11
0
    def test_map5(self):
        rnd = self.rnd
        a, b, size = 1, 100, 50

        out = Stream(rnd.int_range_supplier(a, b)) \
            .limit(size) \
            .reduce(1, bi_func=op.mul) \
            .get()

        rnd.reset()

        out_target = reduce(op.mul, rnd.int_range(a, b, size=size))

        self.assertEqual(out, out_target)
예제 #12
0
    def test_map1(self):
        rnd = self.rnd
        a, b, size = 1, 100, 1000

        add_5 = lambda x: x + 5
        pow_3 = lambda x: x**3

        out = (Stream(rnd.int_range_supplier(
            a, b)).limit(size).map(add_5).map(pow_3).collect(ToList()))

        rnd.reset()

        out_target = [pow_3(add_5(e)) for e in rnd.int_range(a, b, size=size)]

        self.assertListEqual(out, out_target)
예제 #13
0
    def test_1(self):
        rnd = random()

        start, end = 1, 100
        size = 1000

        data = rnd.int_range(start, end, size=size)

        # finding frequency of integer numbers generated by random source "rnd".
        # To get this, grouping by elements on their value then collecting them in a list
        # and then finding number of elements in list.
        # For better method see "test_1a"
        element_frequency = Stream(data).collect(
            GroupingBy(identity, CollectAndThen(ToList(), len)))

        out_target = Counter(data)
        self.assertDictEqual(element_frequency, out_target)
예제 #14
0
    def test_map4(self):
        rnd = self.rnd
        a, b, size = 1, 100, 1000

        pow_2 = lambda x: x**2

        out = Stream(rnd.int_range_supplier(a, b)) \
            .limit(size) \
            .map(pow_2) \
            .reduce(0, bi_func=op.add) \
            .get()

        rnd.reset()

        out_target = sum(pow_2(e) for e in rnd.int_range(a, b, size=size))

        self.assertEqual(out, out_target)
예제 #15
0
    def test_map8(self):
        rnd = self.rnd
        a, b, size = 1, 100, 50

        rng = range(3, 70)

        out = (Stream(rnd.int_range_supplier(
            a, b)).limit(size).zip(rng).map(sum).reduce(1,
                                                        bi_func=op.mul).get())

        rnd.reset()

        data = (e + r for e, r in zip(rnd.int_range(a, b, size=size), rng))

        out_target = reduce(op.mul, data)

        self.assertEqual(out, out_target)
예제 #16
0
파일: sort_test.py 프로젝트: ShivKJ/Stream
    def test_2(self):
        size = 1000

        rnd = random()

        square = lambda x: x**2

        out = (Stream.from_supplier(rnd.random).limit(size).map(square).sort(
            reverse=True).collect(ToList()))

        rnd.reset()

        out_target = sorted((square(rnd.random()) for _ in range(size)),
                            reverse=True)
        for o, t in zip(out, out_target):
            with self.subTest(o=o):
                self.assertAlmostEqual(o, t, delta=1e-9)