Skip to content

Commit e7859f6

Browse files
authored
feat: Introduce <REAL>_TRUNC_<INT> functions
This commit introduces the <REAL>_TRUNC_<INT> library functions, which make use of our implicit truncation feature.
1 parent 867e5d9 commit e7859f6

File tree

3 files changed

+266
-0
lines changed

3 files changed

+266
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
f = open("real_trunc_int.st", "w")
2+
3+
types_real = ["REAL", "LREAL"]
4+
types_int = ["SINT", "USINT", "INT", "UINT", "DINT", "UDINT", "LINT", "ULINT"]
5+
6+
template = """
7+
(********************
8+
*
9+
* Converts {0} to {1}
10+
*
11+
********************)
12+
FUNCTION {0}_TRUNC_{1} : {1}
13+
VAR_INPUT
14+
in : {0};
15+
END_VAR
16+
17+
{0}_TRUNC_{1} := in;
18+
END_FUNCTION
19+
"""
20+
21+
for real in types_real:
22+
for int in types_int:
23+
f.write(template.format(real, int))
24+
f.write("\n")
Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
2+
(********************
3+
*
4+
* Converts REAL to SINT
5+
*
6+
********************)
7+
FUNCTION REAL_TRUNC_SINT : SINT
8+
VAR_INPUT
9+
in : REAL;
10+
END_VAR
11+
12+
REAL_TRUNC_SINT := in;
13+
END_FUNCTION
14+
15+
16+
(********************
17+
*
18+
* Converts REAL to USINT
19+
*
20+
********************)
21+
FUNCTION REAL_TRUNC_USINT : USINT
22+
VAR_INPUT
23+
in : REAL;
24+
END_VAR
25+
26+
REAL_TRUNC_USINT := in;
27+
END_FUNCTION
28+
29+
30+
(********************
31+
*
32+
* Converts REAL to INT
33+
*
34+
********************)
35+
FUNCTION REAL_TRUNC_INT : INT
36+
VAR_INPUT
37+
in : REAL;
38+
END_VAR
39+
40+
REAL_TRUNC_INT := in;
41+
END_FUNCTION
42+
43+
44+
(********************
45+
*
46+
* Converts REAL to UINT
47+
*
48+
********************)
49+
FUNCTION REAL_TRUNC_UINT : UINT
50+
VAR_INPUT
51+
in : REAL;
52+
END_VAR
53+
54+
REAL_TRUNC_UINT := in;
55+
END_FUNCTION
56+
57+
58+
(********************
59+
*
60+
* Converts REAL to DINT
61+
*
62+
********************)
63+
FUNCTION REAL_TRUNC_DINT : DINT
64+
VAR_INPUT
65+
in : REAL;
66+
END_VAR
67+
68+
REAL_TRUNC_DINT := in;
69+
END_FUNCTION
70+
71+
72+
(********************
73+
*
74+
* Converts REAL to UDINT
75+
*
76+
********************)
77+
FUNCTION REAL_TRUNC_UDINT : UDINT
78+
VAR_INPUT
79+
in : REAL;
80+
END_VAR
81+
82+
REAL_TRUNC_UDINT := in;
83+
END_FUNCTION
84+
85+
86+
(********************
87+
*
88+
* Converts REAL to LINT
89+
*
90+
********************)
91+
FUNCTION REAL_TRUNC_LINT : LINT
92+
VAR_INPUT
93+
in : REAL;
94+
END_VAR
95+
96+
REAL_TRUNC_LINT := in;
97+
END_FUNCTION
98+
99+
100+
(********************
101+
*
102+
* Converts REAL to ULINT
103+
*
104+
********************)
105+
FUNCTION REAL_TRUNC_ULINT : ULINT
106+
VAR_INPUT
107+
in : REAL;
108+
END_VAR
109+
110+
REAL_TRUNC_ULINT := in;
111+
END_FUNCTION
112+
113+
114+
(********************
115+
*
116+
* Converts LREAL to SINT
117+
*
118+
********************)
119+
FUNCTION LREAL_TRUNC_SINT : SINT
120+
VAR_INPUT
121+
in : LREAL;
122+
END_VAR
123+
124+
LREAL_TRUNC_SINT := in;
125+
END_FUNCTION
126+
127+
128+
(********************
129+
*
130+
* Converts LREAL to USINT
131+
*
132+
********************)
133+
FUNCTION LREAL_TRUNC_USINT : USINT
134+
VAR_INPUT
135+
in : LREAL;
136+
END_VAR
137+
138+
LREAL_TRUNC_USINT := in;
139+
END_FUNCTION
140+
141+
142+
(********************
143+
*
144+
* Converts LREAL to INT
145+
*
146+
********************)
147+
FUNCTION LREAL_TRUNC_INT : INT
148+
VAR_INPUT
149+
in : LREAL;
150+
END_VAR
151+
152+
LREAL_TRUNC_INT := in;
153+
END_FUNCTION
154+
155+
156+
(********************
157+
*
158+
* Converts LREAL to UINT
159+
*
160+
********************)
161+
FUNCTION LREAL_TRUNC_UINT : UINT
162+
VAR_INPUT
163+
in : LREAL;
164+
END_VAR
165+
166+
LREAL_TRUNC_UINT := in;
167+
END_FUNCTION
168+
169+
170+
(********************
171+
*
172+
* Converts LREAL to DINT
173+
*
174+
********************)
175+
FUNCTION LREAL_TRUNC_DINT : DINT
176+
VAR_INPUT
177+
in : LREAL;
178+
END_VAR
179+
180+
LREAL_TRUNC_DINT := in;
181+
END_FUNCTION
182+
183+
184+
(********************
185+
*
186+
* Converts LREAL to UDINT
187+
*
188+
********************)
189+
FUNCTION LREAL_TRUNC_UDINT : UDINT
190+
VAR_INPUT
191+
in : LREAL;
192+
END_VAR
193+
194+
LREAL_TRUNC_UDINT := in;
195+
END_FUNCTION
196+
197+
198+
(********************
199+
*
200+
* Converts LREAL to LINT
201+
*
202+
********************)
203+
FUNCTION LREAL_TRUNC_LINT : LINT
204+
VAR_INPUT
205+
in : LREAL;
206+
END_VAR
207+
208+
LREAL_TRUNC_LINT := in;
209+
END_FUNCTION
210+
211+
212+
(********************
213+
*
214+
* Converts LREAL to ULINT
215+
*
216+
********************)
217+
FUNCTION LREAL_TRUNC_ULINT : ULINT
218+
VAR_INPUT
219+
in : LREAL;
220+
END_VAR
221+
222+
LREAL_TRUNC_ULINT := in;
223+
END_FUNCTION
224+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// RUN: (%COMPILE %s && %RUN) | %CHECK %s
2+
FUNCTION main
3+
printf('%d$N', REAL_TRUNC_SINT(5.6)); // CHECK: 5
4+
printf('%d$N', REAL_TRUNC_USINT(5.6)); // CHECK: 5
5+
printf('%d$N', REAL_TRUNC_INT(5.6)); // CHECK: 5
6+
printf('%d$N', REAL_TRUNC_UINT(5.6)); // CHECK: 5
7+
printf('%d$N', REAL_TRUNC_INT(5.6)); // CHECK: 5
8+
printf('%d$N', REAL_TRUNC_UINT(5.6)); // CHECK: 5
9+
printf('%d$N', REAL_TRUNC_DINT(5.6)); // CHECK: 5
10+
printf('%d$N', REAL_TRUNC_UDINT(5.6)); // CHECK: 5
11+
printf('%d$N', REAL_TRUNC_LINT(5.6)); // CHECK: 5
12+
printf('%d$N', REAL_TRUNC_ULINT(5.6)); // CHECK: 5
13+
14+
printf('%d$N', REAL_TRUNC_SINT(-5.6)); // CHECK: -5
15+
printf('%d$N', REAL_TRUNC_INT(-5.6)); // CHECK: -5
16+
printf('%d$N', REAL_TRUNC_DINT(-5.6)); // CHECK: -5
17+
printf('%d$N', REAL_TRUNC_LINT(-5.6)); // CHECK: -5
18+
END_FUNCTION

0 commit comments

Comments
 (0)