def test_expression_for_modulus_of_two_constants_representation(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        node_type = BinaryExpression.Modulo
        expr = BinaryExpression(node_type, a, b)

        self.assertEquals("(10 % 20)", str(expr))
Exemplo n.º 2
0
    def test_binary_expression_only_accepts_expressions_for_arguments(self):
        a = 10
        a_expr = ConstantExpression(10)
        b = "20"
        b_expr = ConstantExpression(20)
        node_type = BinaryExpression.Add

        self.assertRaisesEx(
            ValueError,
            BinaryExpression,
            node_type,
            a,
            b_expr,
            exc_pattern=re.compile(
                "Lhs must be an expression \(an instance of a class that inherits from pynq.Expression\)"
            ))
        self.assertRaisesEx(
            ValueError,
            BinaryExpression,
            node_type,
            a_expr,
            b,
            exc_pattern=re.compile(
                "Rhs must be an expression \(an instance of a class that inherits from pynq.Expression\)"
            ))
        self.assertRaisesEx(ValueError,
                            BinaryExpression,
                            None,
                            a_expr,
                            b_expr,
                            exc_pattern=re.compile(
                                "The BinaryExpression node type is required"))
    def test_expression_for_addition_of_two_constants_representation(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        node_type = BinaryExpression.Add
        expr = BinaryExpression(node_type, a, b)

        self.assertEquals("(10 + 20)", str(expr))
Exemplo n.º 4
0
 def test_expression_less_than_or_equal_of_two_constants_representation(self):
     a = ConstantExpression(True)
     b = ConstantExpression(False)
     node_type = BinaryExpression.LessThanOrEqual
     expr = BinaryExpression(node_type, a, b)
     
     self.assertEquals("(True <= False)", str(expr))
Exemplo n.º 5
0
 def test_expression_not_equal_of_two_constants_representation(self):
     a = ConstantExpression(True)
     b = ConstantExpression(False)
     node_type = BinaryExpression.NotEqual
     expr = BinaryExpression(node_type, a, b)
     
     self.assertEquals("(True != False)", str(expr))
Exemplo n.º 6
0
 def test_expression_greater_than_of_two_constants_representation(self):
     a = ConstantExpression(True)
     b = ConstantExpression(False)
     node_type = BinaryExpression.GreaterThan
     expr = BinaryExpression(node_type, a, b)
     
     self.assertEquals("(True > False)", str(expr))
    def test_expression_for_multiplication_of_two_constants_representation(
            self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        node_type = BinaryExpression.Multiply
        expr = BinaryExpression(node_type, a, b)

        self.assertEquals("(10 * 20)", str(expr))
Exemplo n.º 8
0
    def test_expression_not_equal_of_two_constants(self):
        a = ConstantExpression(True)
        b = ConstantExpression(False)
        node_type = BinaryExpression.NotEqual
        expr = BinaryExpression(node_type, a, b)

        self.assertEquals(expr.node_type, node_type)
        self.assertEquals(expr.lhs, a)
        self.assertEquals(expr.rhs, b)
Exemplo n.º 9
0
    def test_nested_equal_expression_representation(self):
        a = ConstantExpression(True)
        b = ConstantExpression(False)
        c = ConstantExpression(None)
        node_type = BinaryExpression.Equal

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b), c)

        self.assertEquals("((True == False) == None)", str(expr))
Exemplo n.º 10
0
    def test_nested_less_than_or_equal_expression_representation(self):
        a = ConstantExpression(True)
        b = ConstantExpression(False)
        c = ConstantExpression(None)
        node_type = BinaryExpression.LessThanOrEqual

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b), c)

        self.assertEquals("((True <= False) <= None)", str(expr))
Exemplo n.º 11
0
    def test_expression_greater_than_or_equal_of_two_constants(self):
        a = ConstantExpression(True)
        b = ConstantExpression(False)
        node_type = BinaryExpression.GreaterThanOrEqual
        expr = BinaryExpression(node_type, a, b)

        self.assertEquals(expr.node_type, node_type)
        self.assertEquals(expr.lhs, a)
        self.assertEquals(expr.rhs, b)
Exemplo n.º 12
0
    def test_expression_less_than_of_two_constants(self):
        a = ConstantExpression(True)
        b = ConstantExpression(False)
        node_type = BinaryExpression.LessThan
        expr = BinaryExpression(node_type, a, b)

        self.assertEquals(expr.node_type, node_type)
        self.assertEquals(expr.lhs, a)
        self.assertEquals(expr.rhs, b)
Exemplo n.º 13
0
    def test_nested_greater_than_expression_representation(self):
        a = ConstantExpression(True)
        b = ConstantExpression(False)
        c = ConstantExpression(None)
        node_type = BinaryExpression.GreaterThan

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b), c)

        self.assertEquals("((True > False) > None)", str(expr))
    def test_expression_for_addition_of_two_constants(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        node_type = BinaryExpression.Add
        expr = BinaryExpression(node_type, a, b)

        self.assertEquals(expr.node_type, node_type)
        self.assertEquals(expr.lhs, a)
        self.assertEquals(expr.rhs, b)
    def test_nested_power_expression_representation(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        c = ConstantExpression(30)
        node_type = BinaryExpression.Power

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b),
                                c)

        self.assertEquals("((10 ** 20) ** 30)", str(expr))
    def test_nested_division_expression_representation(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        c = ConstantExpression(30)
        node_type = BinaryExpression.Divide

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b),
                                c)

        self.assertEquals("((10 / 20) / 30)", str(expr))
    def test_nested_addition_expression_representation(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        c = ConstantExpression(30)
        node_type = BinaryExpression.Add

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b),
                                c)

        self.assertEquals("((10 + 20) + 30)", str(expr))
    def test_nested_modulus_expression_representation(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        c = ConstantExpression(30)
        node_type = BinaryExpression.Modulo

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b),
                                c)

        self.assertEquals("((10 % 20) % 30)", str(expr))
    def test_nested_subtraction_expression_representation(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        c = ConstantExpression(30)
        node_type = BinaryExpression.Subtract

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b),
                                c)

        self.assertEquals("((10 - 20) - 30)", str(expr))
    def test_nested_multiplication_expression_representation(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        c = ConstantExpression(30)
        node_type = BinaryExpression.Multiply

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b),
                                c)

        self.assertEquals("((10 * 20) * 30)", str(expr))
Exemplo n.º 21
0
    def test_nested_not_equal_expression(self):
        a = ConstantExpression(True)
        b = ConstantExpression(False)
        c = ConstantExpression(None)
        node_type = BinaryExpression.NotEqual

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b), c)

        self.assertEquals(expr.node_type, node_type)
        self.failUnless(isinstance(expr.lhs, BinaryExpression), "The left-hand side of the binary expression should be a binary expression as well, but is %s" % expr.lhs.__class__)
        self.assertEquals(expr.lhs.node_type, node_type)
        self.assertEquals(expr.lhs.lhs, a)
        self.assertEquals(expr.lhs.rhs, b)
        self.assertEquals(expr.rhs, c)
Exemplo n.º 22
0
    def test_nested_negate_expression_representation(self):
        a = ConstantExpression(10)
        node_type = UnaryExpression.Negate

        expr = UnaryExpression(node_type, UnaryExpression(node_type, a))

        self.assertEquals("negate(negate(10))", str(expr))
Exemplo n.º 23
0
    def test_expression_negate_of_a_constant(self):
        a = ConstantExpression(10)
        node_type = UnaryExpression.Negate
        expr = UnaryExpression(node_type, a)

        self.assertEquals(expr.node_type, node_type)
        self.assertEquals(expr.rhs, a)
Exemplo n.º 24
0
    def test_expression_length_of_constant(self):
        a = ConstantExpression(["a", "b"])
        node_type = UnaryExpression.CollectionLength
        expr = UnaryExpression(node_type, a)

        self.assertEquals(expr.node_type, node_type)
        self.assertEquals(expr.rhs, a)
Exemplo n.º 25
0
    def test_nested_not_expression_representation(self):
        a = ConstantExpression(True)
        node_type = UnaryExpression.Not

        expr = UnaryExpression(node_type, UnaryExpression(node_type, a))

        self.assertEquals("(not (not True))", str(expr))
Exemplo n.º 26
0
    def test_expression_not_of_a_constant(self):
        a = ConstantExpression(True)
        node_type = UnaryExpression.Not
        expr = UnaryExpression(node_type, a)

        self.assertEquals(expr.node_type, node_type)
        self.assertEquals(expr.rhs, a)
    def test_nested_addition_expression(self):
        a = ConstantExpression(10)
        b = ConstantExpression(20)
        c = ConstantExpression(30)
        node_type = BinaryExpression.Add

        expr = BinaryExpression(node_type, BinaryExpression(node_type, a, b),
                                c)

        self.assertEquals(expr.node_type, node_type)
        self.failUnless(
            isinstance(expr.lhs, BinaryExpression),
            "The left-hand side of the binary expression should be a binary expression as well, but is %s"
            % expr.lhs.__class__)
        self.assertEquals(expr.lhs.node_type, node_type)
        self.assertEquals(expr.lhs.lhs, a)
        self.assertEquals(expr.lhs.rhs, b)
        self.assertEquals(expr.rhs, c)
Exemplo n.º 28
0
    def test_nested_negate_expression(self):
        a = ConstantExpression(10)
        node_type = UnaryExpression.Negate

        expr = UnaryExpression(node_type, UnaryExpression(node_type, a))

        self.assertEquals(expr.node_type, node_type)
        self.failUnless(
            isinstance(expr.rhs, UnaryExpression),
            "The right-hand side of the unary expression should be an unary expression as well, but is %s"
            % expr.rhs.__class__)
        self.assertEquals(expr.rhs.node_type, node_type)
        self.assertEquals(expr.rhs.rhs, a)
Exemplo n.º 29
0
    def test_expression_length_can_only_accept_constant_expression_of_list_types(
            self):
        a = ConstantExpression(["a", "b"])
        b = ConstantExpression("b")
        node_type = UnaryExpression.CollectionLength

        expr = UnaryExpression(node_type, a)
        self.assertRaisesEx(
            ValueError,
            UnaryExpression,
            node_type,
            "some string",
            exc_pattern=re.compile(
                "The CollectionLength unary expression can only take ConstantExpressions that hold tuples or lists as parameters."
            ))
        self.assertRaisesEx(
            ValueError,
            UnaryExpression,
            node_type,
            b,
            exc_pattern=re.compile(
                "The CollectionLength unary expression can only take ConstantExpressions that hold tuples or lists as parameters."
            ))
Exemplo n.º 30
0
    def test_expression_negate_of_a_constant_representation(self):
        a = ConstantExpression(10)
        node_type = UnaryExpression.Negate
        expr = UnaryExpression(node_type, a)

        self.assertEquals("negate(10)", str(expr))