-
Notifications
You must be signed in to change notification settings - Fork 2
/
test_iec_ast.py
107 lines (86 loc) · 2.81 KB
/
test_iec_ast.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import pytest
from iec_ast import *
from llvm import *
from llvm.core import *
from llvm.ee import *
def test_function():
args_input = [
iec_arg("a", "integer"),
iec_arg("b", "integer"),
]
args_local = [
iec_arg("c", "integer"),
iec_arg("d", "integer"),
]
args = [iec_args_input(args_input), iec_args_local(args_local)]
statements = [
iec_statement_return(iec_val(3))
]
f = iec_function("my_func", "integer", args, statements)
c = context()
c.module = Module.new('my_module')
v = f.generate_code(c)
gf = c.module.get_function_named("my_func")
e = ExecutionEngine.new(c.module)
arg1 = GenericValue.int(Type.int(), 1)
arg2 = GenericValue.int(Type.int(), 2)
retval = e.run_function(gf, [arg1, arg2])
assert retval.as_int() == 3
def test_function_expression():
args_input = [
iec_arg("a", "integer"),
iec_arg("b", "integer"),
]
args = [iec_args_input(args_input)]
statements = [
iec_statement_return(iec_binary_operator("+", iec_val(2), iec_val(3))),
]
f = iec_function("my_func", "integer", args, statements)
c = context()
c.module = Module.new('my_module')
v = f.generate_code(c)
gf = c.module.get_function_named("my_func")
arg1 = GenericValue.int(Type.int(), 1)
arg2 = GenericValue.int(Type.int(), 2)
e = ExecutionEngine.new(c.module)
retval = e.run_function(gf, [arg1, arg2])
assert retval.as_int() == 5
def test_function_expression():
args_input = [
iec_arg("a", "integer"),
iec_arg("b", "integer"),
]
args = [iec_args_input(args_input)]
statements = [
iec_statement_return(iec_binary_operator("+", iec_val(2), iec_val(3))),
]
f = iec_function("my_func", "integer", args, statements)
c = context()
c.module = Module.new('my_module')
v = f.generate_code(c)
gf = c.module.get_function_named("my_func")
arg1 = GenericValue.int(Type.int(), 1)
arg2 = GenericValue.int(Type.int(), 2)
e = ExecutionEngine.new(c.module)
retval = e.run_function(gf, [arg1, arg2])
assert retval.as_int() == 5
def test_function_variable_expression():
args_input = [
iec_arg("a", "integer"),
iec_arg("b", "integer"),
]
args = [iec_args_input(args_input)]
statements = [
iec_statement_return(
iec_binary_operator("+", iec_variable('a'), iec_variable('b'))),
]
f = iec_function("my_func", "integer", args, statements)
c = context()
c.module = Module.new('my_module')
v = f.generate_code(c)
gf = c.module.get_function_named("my_func")
arg1 = GenericValue.int(Type.int(), 1)
arg2 = GenericValue.int(Type.int(), 2)
e = ExecutionEngine.new(c.module)
retval = e.run_function(gf, [arg1, arg2])
assert retval.as_int() == 3