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))
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))
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_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))
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_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_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_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_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)
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))
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))
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_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))
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))
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))
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)
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_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)
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)
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)
def led(self, left): return BinaryExpression(BinaryExpression.Or, left, self.expression(self.lbp - 1))
def led(self, left): return BinaryExpression(BinaryExpression.Subtract, left, self.expression(self.lbp))
def led(self, left): return BinaryExpression(BinaryExpression.Multiply, left, self.expression(self.lbp))
def led(self, left): return BinaryExpression(BinaryExpression.LessThanOrEqual, left, self.expression(self.lbp))
def led(self, left): return BinaryExpression(BinaryExpression.GreaterThan, left, self.expression(self.lbp))
def led(self, left): return BinaryExpression(BinaryExpression.NotEqual, left, self.expression(self.lbp))
def led(self, left): return BinaryExpression(BinaryExpression.Divide, left, self.expression(self.lbp))
def led(self, left): return BinaryExpression(BinaryExpression.Modulo, left, self.expression(self.lbp))