-
Notifications
You must be signed in to change notification settings - Fork 57
/
test_parser_error.py
72 lines (56 loc) · 1.55 KB
/
test_parser_error.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import pytest
from xdsl.ir import MLContext
from xdsl.irdl import (
AnyAttr,
IRDLOperation,
VarOperand,
VarOpResult,
irdl_op_definition,
var_operand_def,
var_result_def,
)
from xdsl.parser import Parser
from xdsl.utils.exceptions import ParseError
@irdl_op_definition
class UnkownOp(IRDLOperation):
name = "unknown"
ops: VarOperand = var_operand_def(AnyAttr())
res: VarOpResult = var_result_def(AnyAttr())
def check_error(prog: str, line: int, column: int, message: str):
ctx = MLContext()
ctx.load_op(UnkownOp)
parser = Parser(ctx, prog)
with pytest.raises(ParseError, match=message) as e:
parser.parse_operation()
assert e.value.span.get_line_col() == (line, column)
def test_parser_missing_equal():
"""Test a missing equal sign error."""
ctx = MLContext()
ctx.load_op(UnkownOp)
prog = """
"unknown"() ({
%0 "unknown"() : () -> !i32
}) : () -> ()
"""
check_error(prog, 3, 5, "Expected '=' after operation result list")
def test_parser_redefined_value():
"""Test an SSA value redefinition error."""
ctx = MLContext()
ctx.load_op(UnkownOp)
prog = """
"unknown"() ({
%val = "unknown"() : () -> i32
%val = "unknown"() : () -> i32
}) : () -> ()
"""
check_error(prog, 4, 2, "SSA value %val is already defined")
def test_parser_missing_operation_name():
"""Test a missing operation name error."""
ctx = MLContext()
ctx.load_op(UnkownOp)
prog = """
"unknown"() ({
%val =
}) : () -> ()
"""
check_error(prog, 4, 0, "operation name expected")