Skip to content

Commit 2890f0b

Browse files
committed
test: add runtime checks in get_inputs test to check for mocked inputs
on the Rust side
1 parent b0edae2 commit 2890f0b

File tree

6 files changed

+425
-31
lines changed

6 files changed

+425
-31
lines changed

codegen/masm/src/codegen/emit/int64.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,8 @@ impl<'a> OpEmitter<'a> {
256256
/// This operation is checked, so if the values are not valid u64, execution will trap.
257257
#[inline]
258258
pub fn lte_u64(&mut self) {
259-
self.emit(Op::Exec("std::math::u64::checked_lte".parse().unwrap()));
259+
// TODO: temporarily use unchecked version until https://github.com/0xPolygonMiden/compiler/issues/239 is resolved
260+
self.emit(Op::Exec("::std::math::u64::lte".parse().unwrap()));
260261
}
261262

262263
/// Pops two u64 values off the stack, `b` and `a`, and pushes `a > b` on the stack.

tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir

Lines changed: 100 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,107 @@
1010
;; Functions
1111
(func (export #entrypoint) (param i32)
1212
(block 0 (param v0 i32)
13-
(call #miden_tx_kernel_sys::get_inputs v0)
14-
(br (block 1)))
13+
(let (v1 i32) (const.i32 0))
14+
(let (v2 i32) (global.load i32 (global.symbol #__stack_pointer)))
15+
(let (v3 i32) (const.i32 16))
16+
(let (v4 i32) (sub.wrapping v2 v3))
17+
(let (v5 (ptr i32)) (global.symbol #__stack_pointer))
18+
(store v5 v4)
19+
(let (v6 i32) (const.i32 4))
20+
(let (v7 i32) (add.wrapping v4 v6))
21+
(call #miden_tx_kernel_sys::get_inputs v7)
22+
(let (v8 u32) (cast v4))
23+
(let (v9 u32) (add.checked v8 12))
24+
(let (v10 (ptr i32)) (inttoptr v9))
25+
(let (v11 i32) (load v10))
26+
(let (v12 i1) (eq v11 0))
27+
(let (v13 i32) (cast v12))
28+
(let (v14 i1) (neq v13 0))
29+
(condbr v14 (block 2) (block 3)))
1530

16-
(block 1
31+
(block 1)
32+
33+
(block 2
34+
(unreachable))
35+
36+
(block 3
37+
(let (v15 u32) (cast v4))
38+
(let (v16 u32) (add.checked v15 8))
39+
(let (v17 (ptr i32)) (inttoptr v16))
40+
(let (v18 i32) (load v17))
41+
(let (v19 u32) (cast v18))
42+
(let (v20 (ptr felt)) (inttoptr v19))
43+
(let (v21 felt) (load v20))
44+
(let (v22 i64) (const.i64 4294967295))
45+
(let (v23 felt) (cast v22))
46+
(assert.eq v23 v21)
47+
(let (v24 i32) (const.i32 1))
48+
(let (v25 i1) (eq v11 v24))
49+
(let (v26 i32) (cast v25))
50+
(let (v27 i1) (neq v26 0))
51+
(condbr v27 (block 2) (block 4)))
52+
53+
(block 4
54+
(let (v28 u32) (cast v18))
55+
(let (v29 u32) (add.checked v28 8))
56+
(let (v30 (ptr felt)) (inttoptr v29))
57+
(let (v31 felt) (load v30))
58+
(let (v32 i64) (const.i64 1))
59+
(let (v33 felt) (cast v32))
60+
(assert.eq v33 v31)
61+
(let (v34 i32) (const.i32 2))
62+
(let (v35 u32) (cast v11))
63+
(let (v36 u32) (cast v34))
64+
(let (v37 i1) (lte v35 v36))
65+
(let (v38 i32) (cast v37))
66+
(let (v39 i1) (neq v38 0))
67+
(condbr v39 (block 2) (block 5)))
68+
69+
(block 5
70+
(let (v40 u32) (cast v18))
71+
(let (v41 u32) (add.checked v40 16))
72+
(let (v42 (ptr felt)) (inttoptr v41))
73+
(let (v43 felt) (load v42))
74+
(let (v44 i64) (const.i64 0))
75+
(let (v45 felt) (cast v44))
76+
(assert.eq v45 v43)
77+
(let (v46 i32) (const.i32 3))
78+
(let (v47 i1) (eq v11 v46))
79+
(let (v48 i32) (cast v47))
80+
(let (v49 i1) (neq v48 0))
81+
(condbr v49 (block 2) (block 6)))
82+
83+
(block 6
84+
(let (v50 u32) (cast v18))
85+
(let (v51 u32) (add.checked v50 24))
86+
(let (v52 (ptr felt)) (inttoptr v51))
87+
(let (v53 felt) (load v52))
88+
(let (v54 i64) (const.i64 4294967295))
89+
(let (v55 felt) (cast v54))
90+
(assert.eq v55 v53)
91+
(let (v56 i32) (const.i32 8))
92+
(let (v57 i32) (add.wrapping v0 v56))
93+
(let (v58 i32) (const.i32 4))
94+
(let (v59 i32) (add.wrapping v4 v58))
95+
(let (v60 i32) (const.i32 8))
96+
(let (v61 i32) (add.wrapping v59 v60))
97+
(let (v62 u32) (cast v61))
98+
(let (v63 (ptr i32)) (inttoptr v62))
99+
(let (v64 i32) (load v63))
100+
(let (v65 u32) (cast v57))
101+
(let (v66 (ptr i32)) (inttoptr v65))
102+
(store v66 v64)
103+
(let (v67 u32) (cast v4))
104+
(let (v68 u32) (add.checked v67 4))
105+
(let (v69 (ptr i64)) (inttoptr v68))
106+
(let (v70 i64) (load v69))
107+
(let (v71 u32) (cast v0))
108+
(let (v72 (ptr i64)) (inttoptr v71))
109+
(store v72 v70)
110+
(let (v73 i32) (const.i32 16))
111+
(let (v74 i32) (add.wrapping v4 v73))
112+
(let (v75 (ptr i32)) (global.symbol #__stack_pointer))
113+
(store v75 v74)
17114
(ret))
18115
)
19116

tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,222 @@ export.get_inputs
1515
use.miden::note
1616

1717
export.entrypoint
18+
mem_load.0x00000000
19+
push.16
20+
u32wrapping_sub
21+
push.4
22+
dup.1
23+
swap.1
24+
u32wrapping_add
1825
exec."miden_tx_kernel_sys::get_inputs"
26+
dup.1
27+
swap.1
28+
dup.0
29+
u32mod.16
30+
dup.0
31+
u32mod.4
32+
swap.1
33+
u32div.4
34+
movup.2
35+
u32div.16
36+
exec.::intrinsics::mem::store_sw
37+
dup.0
38+
add.12
39+
u32assert
40+
dup.0
41+
u32mod.16
42+
dup.0
43+
u32mod.4
44+
swap.1
45+
u32div.4
46+
movup.2
47+
u32div.16
48+
exec.::intrinsics::mem::load_sw
49+
dup.0
50+
eq.0
51+
neq.0
52+
if.true
53+
push.0 assert
54+
else
55+
dup.1
56+
add.8
57+
u32assert
58+
dup.0
59+
u32mod.16
60+
dup.0
61+
u32mod.4
62+
swap.1
63+
u32div.4
64+
movup.2
65+
u32div.16
66+
exec.::intrinsics::mem::load_sw
67+
dup.0
68+
dup.0
69+
u32mod.16
70+
dup.0
71+
u32mod.4
72+
swap.1
73+
u32div.4
74+
movup.2
75+
u32div.16
76+
exec.::intrinsics::mem::load_felt
77+
push.0.4294967295
78+
dup.1
79+
dup.1
80+
push.4294967295.1
81+
exec.::std::math::u64::lte
82+
assert
83+
mul
84+
assert_eq
85+
push.1
86+
dup.2
87+
swap.1
88+
eq
89+
neq.0
90+
if.true
91+
push.0 assert
92+
else
93+
dup.0
94+
add.8
95+
u32assert
96+
dup.0
97+
u32mod.16
98+
dup.0
99+
u32mod.4
100+
swap.1
101+
u32div.4
102+
movup.2
103+
u32div.16
104+
exec.::intrinsics::mem::load_felt
105+
push.0.1
106+
dup.1
107+
dup.1
108+
push.4294967295.1
109+
exec.::std::math::u64::lte
110+
assert
111+
mul
112+
assert_eq
113+
dup.1
114+
push.2
115+
u32lte
116+
neq.0
117+
if.true
118+
push.0 assert
119+
else
120+
dup.0
121+
add.16
122+
u32assert
123+
dup.0
124+
u32mod.16
125+
dup.0
126+
u32mod.4
127+
swap.1
128+
u32div.4
129+
movup.2
130+
u32div.16
131+
exec.::intrinsics::mem::load_felt
132+
push.0.0
133+
dup.1
134+
dup.1
135+
push.4294967295.1
136+
exec.::std::math::u64::lte
137+
assert
138+
mul
139+
assert_eq
140+
push.3
141+
movup.2
142+
swap.1
143+
eq
144+
neq.0
145+
if.true
146+
push.0 assert
147+
else
148+
push.16
149+
dup.2
150+
swap.1
151+
u32wrapping_add
152+
dup.0
153+
u32mod.16
154+
dup.0
155+
u32mod.4
156+
swap.1
157+
u32div.4
158+
movup.2
159+
u32div.16
160+
exec.::intrinsics::mem::store_sw
161+
dup.1
162+
add.4
163+
u32assert
164+
dup.0
165+
u32mod.16
166+
dup.0
167+
u32mod.4
168+
swap.1
169+
u32div.4
170+
movup.2
171+
u32div.16
172+
exec.::intrinsics::mem::load_dw
173+
dup.4
174+
dup.0
175+
u32mod.16
176+
dup.0
177+
u32mod.4
178+
swap.1
179+
u32div.4
180+
movup.2
181+
u32div.16
182+
exec.::intrinsics::mem::store_dw
183+
push.4
184+
movup.2
185+
swap.1
186+
u32wrapping_add
187+
push.8
188+
u32wrapping_add
189+
dup.0
190+
u32mod.16
191+
dup.0
192+
u32mod.4
193+
swap.1
194+
u32div.4
195+
movup.2
196+
u32div.16
197+
exec.::intrinsics::mem::load_sw
198+
push.8
199+
movup.3
200+
swap.1
201+
u32wrapping_add
202+
dup.0
203+
u32mod.16
204+
dup.0
205+
u32mod.4
206+
swap.1
207+
u32div.4
208+
movup.2
209+
u32div.16
210+
exec.::intrinsics::mem::store_sw
211+
add.24
212+
u32assert
213+
dup.0
214+
u32mod.16
215+
dup.0
216+
u32mod.4
217+
swap.1
218+
u32div.4
219+
movup.2
220+
u32div.16
221+
exec.::intrinsics::mem::load_felt
222+
push.0.4294967295
223+
dup.1
224+
dup.1
225+
push.4294967295.1
226+
exec.::std::math::u64::lte
227+
assert
228+
mul
229+
assert_eq
230+
end
231+
end
232+
end
233+
end
19234
end
20235

21236

0 commit comments

Comments
 (0)