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))
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))
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)])
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)
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)
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))
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)