Skip to content

Commit fd917db

Browse files
committed
add i{32,64}.sub.wast test files
Signed-off-by: Robin Freyler <[email protected]>
1 parent 44ee401 commit fd917db

File tree

2 files changed

+306
-0
lines changed

2 files changed

+306
-0
lines changed

tests/op/i32-sub.wast

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
(module
2+
(func (export "identity.i32") (param i32) (result i32)
3+
(local.get 0)
4+
)
5+
)
6+
(register "utils")
7+
8+
;; Identity
9+
10+
(module
11+
(func (export "i32.sub(x,0)") (param i32) (result i32)
12+
(i32.sub (local.get 0) (i32.const 0))
13+
)
14+
)
15+
(assert_return (invoke "i32.sub(x,0)" (i32.const 0)) (i32.const 0))
16+
(assert_return (invoke "i32.sub(x,0)" (i32.const 1)) (i32.const 1))
17+
(assert_return (invoke "i32.sub(x,0)" (i32.const -1)) (i32.const -1))
18+
(assert_return (invoke "i32.sub(x,0)" (i32.const 42)) (i32.const 42))
19+
(assert_return (invoke "i32.sub(x,0)" (i32.const 0x7FFF_FFFF)) (i32.const 0x7FFF_FFFF))
20+
(assert_return (invoke "i32.sub(x,0)" (i32.const 0x8000_0000)) (i32.const 0x8000_0000))
21+
22+
(module
23+
(func (export "i32.sub(0,x)") (param i32) (result i32)
24+
(i32.sub (i32.const 0) (local.get 0))
25+
)
26+
)
27+
(assert_return (invoke "i32.sub(0,x)" (i32.const 0)) (i32.const 0))
28+
(assert_return (invoke "i32.sub(0,x)" (i32.const 1)) (i32.const -1))
29+
(assert_return (invoke "i32.sub(0,x)" (i32.const -1)) (i32.const 1))
30+
(assert_return (invoke "i32.sub(0,x)" (i32.const 42)) (i32.const -42))
31+
(assert_return (invoke "i32.sub(0,x)" (i32.const 0x7FFF_FFFF)) (i32.const 0x8000_0001))
32+
(assert_return (invoke "i32.sub(0,x)" (i32.const 0x8000_0000)) (i32.const 0x8000_0000))
33+
34+
(module
35+
(import "utils" "identity.i32" (func $identity.i32 (param i32) (result i32)))
36+
(func (export "i32.sub(0,temp)") (param i32) (result i32)
37+
(i32.sub (i32.const 0) (call $identity.i32 (local.get 0)))
38+
)
39+
)
40+
(assert_return (invoke "i32.sub(0,temp)" (i32.const 0)) (i32.const 0))
41+
(assert_return (invoke "i32.sub(0,temp)" (i32.const 1)) (i32.const -1))
42+
(assert_return (invoke "i32.sub(0,temp)" (i32.const -1)) (i32.const 1))
43+
(assert_return (invoke "i32.sub(0,temp)" (i32.const 42)) (i32.const -42))
44+
(assert_return (invoke "i32.sub(0,temp)" (i32.const 0x7FFF_FFFF)) (i32.const 0x8000_0001))
45+
(assert_return (invoke "i32.sub(0,temp)" (i32.const 0x8000_0000)) (i32.const 0x8000_0000))
46+
47+
;; Small `lhs` or `rhs` Constants
48+
49+
(module
50+
(func (export "i32.sub(x,1)") (param i32) (result i32)
51+
(i32.sub (local.get 0) (i32.const 1))
52+
)
53+
)
54+
(assert_return (invoke "i32.sub(x,1)" (i32.const 0)) (i32.const -1))
55+
(assert_return (invoke "i32.sub(x,1)" (i32.const 1)) (i32.const 0))
56+
(assert_return (invoke "i32.sub(x,1)" (i32.const -1)) (i32.const -2))
57+
(assert_return (invoke "i32.sub(x,1)" (i32.const 42)) (i32.const 41))
58+
(assert_return (invoke "i32.sub(x,1)" (i32.const 0x7FFF_FFFF)) (i32.const 0x7FFF_FFFE))
59+
(assert_return (invoke "i32.sub(x,1)" (i32.const 0x8000_0000)) (i32.const 0x7FFF_FFFF))
60+
61+
(module
62+
(func (export "i32.sub(x,-1)") (param i32) (result i32)
63+
(i32.sub (local.get 0) (i32.const -1))
64+
)
65+
)
66+
(assert_return (invoke "i32.sub(x,-1)" (i32.const 0)) (i32.const 1))
67+
(assert_return (invoke "i32.sub(x,-1)" (i32.const 1)) (i32.const 2))
68+
(assert_return (invoke "i32.sub(x,-1)" (i32.const -1)) (i32.const 0))
69+
(assert_return (invoke "i32.sub(x,-1)" (i32.const 42)) (i32.const 43))
70+
(assert_return (invoke "i32.sub(x,-1)" (i32.const 0x7FFF_FFFF)) (i32.const 0x8000_0000))
71+
(assert_return (invoke "i32.sub(x,-1)" (i32.const 0x8000_0000)) (i32.const 0x8000_0001))
72+
73+
(module
74+
(func (export "i32.sub(1,x)") (param i32) (result i32)
75+
(i32.sub (i32.const 1) (local.get 0))
76+
)
77+
)
78+
(assert_return (invoke "i32.sub(1,x)" (i32.const 0)) (i32.const 1))
79+
(assert_return (invoke "i32.sub(1,x)" (i32.const 1)) (i32.const 0))
80+
(assert_return (invoke "i32.sub(1,x)" (i32.const -1)) (i32.const 2))
81+
(assert_return (invoke "i32.sub(1,x)" (i32.const 42)) (i32.const -41))
82+
(assert_return (invoke "i32.sub(1,x)" (i32.const 0x7FFF_FFFF)) (i32.const 0x8000_0002))
83+
(assert_return (invoke "i32.sub(1,x)" (i32.const 0x8000_0000)) (i32.const 0x8000_0001))
84+
85+
(module
86+
(func (export "i32.sub(-1,x)") (param i32) (result i32)
87+
(i32.sub (i32.const -1) (local.get 0))
88+
)
89+
)
90+
(assert_return (invoke "i32.sub(-1,x)" (i32.const 0)) (i32.const -1))
91+
(assert_return (invoke "i32.sub(-1,x)" (i32.const 1)) (i32.const -2))
92+
(assert_return (invoke "i32.sub(-1,x)" (i32.const -1)) (i32.const 0))
93+
(assert_return (invoke "i32.sub(-1,x)" (i32.const 42)) (i32.const -43))
94+
(assert_return (invoke "i32.sub(-1,x)" (i32.const 0x7FFF_FFFF)) (i32.const 0x8000_0000))
95+
(assert_return (invoke "i32.sub(-1,x)" (i32.const 0x8000_0000)) (i32.const 0x7FFF_FFFF))
96+
97+
;; Constant Folding
98+
99+
(module
100+
(func (export "i32.sub(0,0)") (result i32)
101+
(i32.sub (i32.const 0) (i32.const 0))
102+
)
103+
)
104+
(assert_return (invoke "i32.sub(0,0)") (i32.const 0))
105+
106+
(module
107+
(func (export "i32.sub(0,1)") (result i32)
108+
(i32.sub (i32.const 0) (i32.const 1))
109+
)
110+
)
111+
(assert_return (invoke "i32.sub(0,1)") (i32.const -1))
112+
113+
(module
114+
(func (export "i32.sub(1,0)") (result i32)
115+
(i32.sub (i32.const 1) (i32.const 0))
116+
)
117+
)
118+
(assert_return (invoke "i32.sub(1,0)") (i32.const 1))
119+
120+
(module
121+
(func (export "i32.sub(1,-1)") (result i32)
122+
(i32.sub (i32.const 1) (i32.const -1))
123+
)
124+
)
125+
(assert_return (invoke "i32.sub(1,-1)") (i32.const 2))
126+
127+
(module
128+
(func (export "i32.sub(max,-1)") (result i32)
129+
(i32.sub (i32.const 0x7FFF_FFFF) (i32.const -1))
130+
)
131+
)
132+
(assert_return (invoke "i32.sub(max,-1)") (i32.const 0x8000_0000))
133+
134+
(module
135+
(func (export "i32.sub(max,1)") (result i32)
136+
(i32.sub (i32.const 0x7FFF_FFFF) (i32.const 1))
137+
)
138+
)
139+
(assert_return (invoke "i32.sub(max,1)") (i32.const 0x7FFF_FFFE))
140+
141+
(module
142+
(func (export "i32.sub(min,-1)") (result i32)
143+
(i32.sub (i32.const 0x8000_0000) (i32.const -1))
144+
)
145+
)
146+
(assert_return (invoke "i32.sub(min,-1)") (i32.const 0x8000_0001))
147+
148+
(module
149+
(func (export "i32.sub(min,1)") (result i32)
150+
(i32.sub (i32.const 0x8000_0000) (i32.const 1))
151+
)
152+
)
153+
(assert_return (invoke "i32.sub(min,1)") (i32.const 0x7FFF_FFFF))

tests/op/i64-sub.wast

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
(module
2+
(func (export "identity.i64") (param i64) (result i64)
3+
(local.get 0)
4+
)
5+
)
6+
(register "utils")
7+
8+
;; Identity
9+
10+
(module
11+
(func (export "i64.sub(x,0)") (param i64) (result i64)
12+
(i64.sub (local.get 0) (i64.const 0))
13+
)
14+
)
15+
(assert_return (invoke "i64.sub(x,0)" (i64.const 0)) (i64.const 0))
16+
(assert_return (invoke "i64.sub(x,0)" (i64.const 1)) (i64.const 1))
17+
(assert_return (invoke "i64.sub(x,0)" (i64.const -1)) (i64.const -1))
18+
(assert_return (invoke "i64.sub(x,0)" (i64.const 42)) (i64.const 42))
19+
(assert_return (invoke "i64.sub(x,0)" (i64.const 0x7FFF_FFFF_FFFF_FFFF)) (i64.const 0x7FFF_FFFF_FFFF_FFFF))
20+
(assert_return (invoke "i64.sub(x,0)" (i64.const 0x8000_0000_0000_0000)) (i64.const 0x8000_0000_0000_0000))
21+
22+
(module
23+
(func (export "i64.sub(0,x)") (param i64) (result i64)
24+
(i64.sub (i64.const 0) (local.get 0))
25+
)
26+
)
27+
(assert_return (invoke "i64.sub(0,x)" (i64.const 0)) (i64.const 0))
28+
(assert_return (invoke "i64.sub(0,x)" (i64.const 1)) (i64.const -1))
29+
(assert_return (invoke "i64.sub(0,x)" (i64.const -1)) (i64.const 1))
30+
(assert_return (invoke "i64.sub(0,x)" (i64.const 42)) (i64.const -42))
31+
(assert_return (invoke "i64.sub(0,x)" (i64.const 0x7FFF_FFFF_FFFF_FFFF)) (i64.const 0x8000_0000_0000_0001))
32+
(assert_return (invoke "i64.sub(0,x)" (i64.const 0x8000_0000_0000_0000)) (i64.const 0x8000_0000_0000_0000))
33+
34+
(module
35+
(import "utils" "identity.i64" (func $identity.i64 (param i64) (result i64)))
36+
(func (export "i64.sub(0,temp)") (param i64) (result i64)
37+
(i64.sub (i64.const 0) (call $identity.i64 (local.get 0)))
38+
)
39+
)
40+
(assert_return (invoke "i64.sub(0,temp)" (i64.const 0)) (i64.const 0))
41+
(assert_return (invoke "i64.sub(0,temp)" (i64.const 1)) (i64.const -1))
42+
(assert_return (invoke "i64.sub(0,temp)" (i64.const -1)) (i64.const 1))
43+
(assert_return (invoke "i64.sub(0,temp)" (i64.const 42)) (i64.const -42))
44+
(assert_return (invoke "i64.sub(0,temp)" (i64.const 0x7FFF_FFFF_FFFF_FFFF)) (i64.const 0x8000_0000_0000_0001))
45+
(assert_return (invoke "i64.sub(0,temp)" (i64.const 0x8000_0000_0000_0000)) (i64.const 0x8000_0000_0000_0000))
46+
47+
;; Small `lhs` or `rhs` Constants
48+
49+
(module
50+
(func (export "i64.sub(x,1)") (param i64) (result i64)
51+
(i64.sub (local.get 0) (i64.const 1))
52+
)
53+
)
54+
(assert_return (invoke "i64.sub(x,1)" (i64.const 0)) (i64.const -1))
55+
(assert_return (invoke "i64.sub(x,1)" (i64.const 1)) (i64.const 0))
56+
(assert_return (invoke "i64.sub(x,1)" (i64.const -1)) (i64.const -2))
57+
(assert_return (invoke "i64.sub(x,1)" (i64.const 42)) (i64.const 41))
58+
(assert_return (invoke "i64.sub(x,1)" (i64.const 0x7FFF_FFFF_FFFF_FFFF)) (i64.const 0x7FFF_FFFF_FFFF_FFFE))
59+
(assert_return (invoke "i64.sub(x,1)" (i64.const 0x8000_0000_0000_0000)) (i64.const 0x7FFF_FFFF_FFFF_FFFF))
60+
61+
(module
62+
(func (export "i64.sub(x,-1)") (param i64) (result i64)
63+
(i64.sub (local.get 0) (i64.const -1))
64+
)
65+
)
66+
(assert_return (invoke "i64.sub(x,-1)" (i64.const 0)) (i64.const 1))
67+
(assert_return (invoke "i64.sub(x,-1)" (i64.const 1)) (i64.const 2))
68+
(assert_return (invoke "i64.sub(x,-1)" (i64.const -1)) (i64.const 0))
69+
(assert_return (invoke "i64.sub(x,-1)" (i64.const 42)) (i64.const 43))
70+
(assert_return (invoke "i64.sub(x,-1)" (i64.const 0x7FFF_FFFF_FFFF_FFFF)) (i64.const 0x8000_0000_0000_0000))
71+
(assert_return (invoke "i64.sub(x,-1)" (i64.const 0x8000_0000_0000_0000)) (i64.const 0x8000_0000_0000_0001))
72+
73+
(module
74+
(func (export "i64.sub(1,x)") (param i64) (result i64)
75+
(i64.sub (i64.const 1) (local.get 0))
76+
)
77+
)
78+
(assert_return (invoke "i64.sub(1,x)" (i64.const 0)) (i64.const 1))
79+
(assert_return (invoke "i64.sub(1,x)" (i64.const 1)) (i64.const 0))
80+
(assert_return (invoke "i64.sub(1,x)" (i64.const -1)) (i64.const 2))
81+
(assert_return (invoke "i64.sub(1,x)" (i64.const 42)) (i64.const -41))
82+
(assert_return (invoke "i64.sub(1,x)" (i64.const 0x7FFF_FFFF_FFFF_FFFF)) (i64.const 0x8000_0000_0000_0002))
83+
(assert_return (invoke "i64.sub(1,x)" (i64.const 0x8000_0000_0000_0000)) (i64.const 0x8000_0000_0000_0001))
84+
85+
(module
86+
(func (export "i64.sub(-1,x)") (param i64) (result i64)
87+
(i64.sub (i64.const -1) (local.get 0))
88+
)
89+
)
90+
(assert_return (invoke "i64.sub(-1,x)" (i64.const 0)) (i64.const -1))
91+
(assert_return (invoke "i64.sub(-1,x)" (i64.const 1)) (i64.const -2))
92+
(assert_return (invoke "i64.sub(-1,x)" (i64.const -1)) (i64.const 0))
93+
(assert_return (invoke "i64.sub(-1,x)" (i64.const 42)) (i64.const -43))
94+
(assert_return (invoke "i64.sub(-1,x)" (i64.const 0x7FFF_FFFF_FFFF_FFFF)) (i64.const 0x8000_0000_0000_0000))
95+
(assert_return (invoke "i64.sub(-1,x)" (i64.const 0x8000_0000_0000_0000)) (i64.const 0x7FFF_FFFF_FFFF_FFFF))
96+
97+
;; Constant Folding
98+
99+
(module
100+
(func (export "i64.sub(0,0)") (result i64)
101+
(i64.sub (i64.const 0) (i64.const 0))
102+
)
103+
)
104+
(assert_return (invoke "i64.sub(0,0)") (i64.const 0))
105+
106+
(module
107+
(func (export "i64.sub(0,1)") (result i64)
108+
(i64.sub (i64.const 0) (i64.const 1))
109+
)
110+
)
111+
(assert_return (invoke "i64.sub(0,1)") (i64.const -1))
112+
113+
(module
114+
(func (export "i64.sub(1,0)") (result i64)
115+
(i64.sub (i64.const 1) (i64.const 0))
116+
)
117+
)
118+
(assert_return (invoke "i64.sub(1,0)") (i64.const 1))
119+
120+
(module
121+
(func (export "i64.sub(1,-1)") (result i64)
122+
(i64.sub (i64.const 1) (i64.const -1))
123+
)
124+
)
125+
(assert_return (invoke "i64.sub(1,-1)") (i64.const 2))
126+
127+
(module
128+
(func (export "i64.sub(max,-1)") (result i64)
129+
(i64.sub (i64.const 0x7FFF_FFFF_FFFF_FFFF) (i64.const -1))
130+
)
131+
)
132+
(assert_return (invoke "i64.sub(max,-1)") (i64.const 0x8000_0000_0000_0000))
133+
134+
(module
135+
(func (export "i64.sub(max,1)") (result i64)
136+
(i64.sub (i64.const 0x7FFF_FFFF_FFFF_FFFF) (i64.const 1))
137+
)
138+
)
139+
(assert_return (invoke "i64.sub(max,1)") (i64.const 0x7FFF_FFFF_FFFF_FFFE))
140+
141+
(module
142+
(func (export "i64.sub(min,-1)") (result i64)
143+
(i64.sub (i64.const 0x8000_0000_0000_0000) (i64.const -1))
144+
)
145+
)
146+
(assert_return (invoke "i64.sub(min,-1)") (i64.const 0x8000_0000_0000_0001))
147+
148+
(module
149+
(func (export "i64.sub(min,1)") (result i64)
150+
(i64.sub (i64.const 0x8000_0000_0000_0000) (i64.const 1))
151+
)
152+
)
153+
(assert_return (invoke "i64.sub(min,1)") (i64.const 0x7FFF_FFFF_FFFF_FFFF))

0 commit comments

Comments
 (0)