def test_eval_method_with_false_expression(self): env = {"x": 0} while_stmt = WhileStatement( RelOpexpr(">", Varexpr("x"), Integer(10)), AssignStatement("x", BinOpexpr("+", Varexpr("x"), Integer(1)))) while_stmt.eval(env) self.assertEqual(env["x"], 0)
def parse_if_statement_method_with_else_statement(self): tokens = lex("if x > 22 then\nprint x;\nelse\nprint 0;\ndone\n") parser = Parser(tokens) parser.advance() ast = parser.parse_if_statement() expected_ast = IfStatement(RelOpexpr(">", Varexpr("x"), Integer(22)), AST([PrintStatement(Varexpr("x"))]), AST([PrintStatement(Integer(0))])) self.assertEqual(ast, expected_ast)
def test_parse_while_statement_method(self): tokens = lex("while x > 22 do\nprint x;\nx := x - 1;\ndone\n") parser = Parser(tokens) parser.advance() ast = parser.parse_while_statement() expected_ast = WhileStatement( RelOpexpr(">", Varexpr("x"), Integer(22)), AST([ PrintStatement(Varexpr("x")), AssignStatement("x", BinOpexpr("-", Varexpr("x"), Integer(1))) ]), ) self.assertEqual(ast, expected_ast)
def test_eval_method_with_not_equal_operator(self): relopexpr = RelOpexpr("!=", Integer(10), Integer(12)) env = {} result = relopexpr.eval(env) self.assertTrue(result)
def test_eval_method_with_greater_than_or_equal_operator(self): relopexpr = RelOpexpr(">=", Integer(10), Integer(12)) env = {} result = relopexpr.eval(env) self.assertFalse(result)
def test___repr___method(self): relopexpr = RelOpexpr("==", Integer(10), Integer(12)) relopexpr_repr = repr(relopexpr) expected_repr = "RelOpexpr(==, Integer(10), Integer(12))" self.assertEqual(relopexpr_repr, expected_repr)