예제 #1
0
    def test_multi_statement(self):
        data = [1, 2, 3, 4, 5, 6, 7, 8]
        expected = ["2p", "3p", "5p", "7p"]

        def is_prime(num):
            if num <= 1:
                return False

            if num == 2:
                return True

            if num % 2 == 0:
                return False

            for n in range(3, num, 2):
                if n * n > num:
                    break

                if num % n == 0:
                    return False

            return True

        for idx, v in enumerate(
                LinqGenerator.new(data).where(is_prime).select(
                    lambda x: "{}p".format(x))):
            self.assertEqual(expected[idx], v)
예제 #2
0
    def test_filter_transform_to_str(self):
        transform = lambda x: "Hallo {}".format(str(x))
        actual = self.gen_data()
        expected = [transform(x) for x in actual]

        for idx, v in enumerate(LinqGenerator.new(actual).select(transform)):
            self.assertEqual(expected[idx], v)
예제 #3
0
    def test_group_by_gen_sum_int(self):
        test_data = [('x', 12), ('x', 23), ('c', 34), ('c', 35), ('x', 24),
                     ('a', 23), ('x', 1)]
        expected = {'x': 12 + 23 + 24 + 1, 'c': 34 + 35, 'a': 23}

        gen = LinqGenerator.new(test_data).group_by(lambda x: x[0])
        for k in gen:
            self.assertTrue(k in expected)
            for val in gen[k]:
                self.assertEqual(expected[k], val.sum(lambda x: x[1]))
예제 #4
0
    def test_group_by_gen_count(self):
        test_data = [('x', 1), ('x', 23), ('c', 34), ('c', 35), ('x', 24),
                     ('a', 23), ('x', 1)]
        expected = {'x': 2, 'c': 2, 'a': 1}

        gen = LinqGenerator.new(test_data).where(lambda x: x[1] > 1).group_by(
            lambda x: x[0])
        for k in gen:
            tmp = gen[k].select(lambda x: "Test {}".format(x[1]))

            self.assertTrue(k in expected)
            for val in tmp:
                self.assertEqual(expected[k], val.count())
예제 #5
0
    def test_group_by_gen_chained(self):
        test_data = [('x', 1), ('x', 23), ('c', 34), ('c', 35), ('x', 24),
                     ('a', 23), ('x', 1)]
        expected = {
            'x': ["Test 23", "Test 24"],
            'c': ["Test 34", "Test 35"],
            'a': ["Test 23"]
        }

        gen = LinqGenerator.new(test_data).where(lambda x: x[1] > 1).group_by(
            lambda x: x[0])
        for k in gen:
            tmp = gen[k].select(lambda x: "Test {}".format(x[1]))

            self.assertTrue(k in expected)
            for val in tmp:
                self.assertTrue(val in expected[k])
예제 #6
0
 def test_bare_gen(self):
     actual = self.gen_data()
     for idx, v in enumerate(LinqGenerator.new(actual)):
         self.assertEqual(actual[idx], v)
예제 #7
0
    def test_filter_no_res(self):
        criterion = lambda x: x < 0
        actual = [x for x in self.gen_data() if criterion(x)]

        for idx, v in enumerate(LinqGenerator.new(actual).where(criterion)):
            self.assertEqual(actual[idx], v)