def test_filtering_doctest(self):
     result = []
     f = crt.filtering(lambda x: x % 2 == 0)
     crt.consume(f(crt.append(result)), range(10))
     self.assertListEqual(
         result,
         [x for x in range(10) if x % 2 == 0])
    def test_compose_mapping_and_filter(self):
        composed = compose(crt.filtering(lambda x: x < 5),
                           crt.mapping(lambda x: x * 2))

        result = []
        f = composed(crt.append(result))
        for i in range(10):
            f.send(i)
        self.assertListEqual(result, [x * 2 for x in range(10) if x < 5])
    def test_compose_mapping_and_filter(self):
        composed = compose(
            crt.filtering(lambda x: x < 5),
            crt.mapping(lambda x: x * 2))

        result = []
        f = composed(crt.append(result))
        for i in range(10):
            f.send(i)
        self.assertListEqual(
            result,
            [x * 2 for x in range(10) if x < 5])
    def test_compose_three_coroutines(self):
        composed = compose(crt.mapping(lambda x: x * 2),
                           crt.mapping(lambda x: x * x),
                           crt.filtering(lambda x: x % 2 == 0))

        result = []
        f = composed(crt.append(result))

        for i in range(100):
            f.send(i)

        self.assertListEqual(
            result,
            list(
                filter(lambda z: z % 2 == 0,
                       (x * x for x in (y * 2 for y in range(100))))))
    def test_compose_three_coroutines(self):
        composed = compose(
            crt.mapping(lambda x: x * 2),
            crt.mapping(lambda x: x * x),
            crt.filtering(lambda x: x % 2 == 0))

        result = []
        f = composed(crt.append(result))

        for i in range(100):
            f.send(i)

        self.assertListEqual(
            result,
            list(filter(
                lambda z: z % 2 == 0,
                (x * x for x in
                 (y * 2 for y in
                  range(100))))))
 def test_filtering_doctest(self):
     result = []
     f = crt.filtering(lambda x: x % 2 == 0)
     crt.consume(f(crt.append(result)), range(10))
     self.assertListEqual(result, [x for x in range(10) if x % 2 == 0])