Skip to content

Commit b6fa245

Browse files
committed
add test cases for rounding variants
the test cases are supposed to minimal in the sens that when you mix up the implementation with a variant of the same type the testcase can detect such oversights
1 parent bed5549 commit b6fa245

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

test/core/rounding-variants.wast

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
(module
2+
(func (export "f32.sqrt_ceil") (param $a f32) (result f32) (f32.sqrt_ceil (local.get $a)))
3+
(func (export "f32.add_ceil") (param $a f32) (param $b f32) (result f32) (f32.add_ceil (local.get $a) (local.get $b)))
4+
(func (export "f32.sub_ceil") (param $a f32) (param $b f32) (result f32) (f32.sub_ceil (local.get $a) (local.get $b)))
5+
(func (export "f32.mul_ceil") (param $a f32) (param $b f32) (result f32) (f32.mul_ceil (local.get $a) (local.get $b)))
6+
(func (export "f32.div_ceil") (param $a f32) (param $b f32) (result f32) (f32.div_ceil (local.get $a) (local.get $b)))
7+
(func (export "f64.sqrt_ceil") (param $a f64) (result f64) (f64.sqrt_ceil (local.get $a)))
8+
(func (export "f64.add_ceil") (param $a f64) (param $b f64) (result f64) (f64.add_ceil (local.get $a) (local.get $b)))
9+
(func (export "f64.sub_ceil") (param $a f64) (param $b f64) (result f64) (f64.sub_ceil (local.get $a) (local.get $b)))
10+
(func (export "f64.mul_ceil") (param $a f64) (param $b f64) (result f64) (f64.mul_ceil (local.get $a) (local.get $b)))
11+
(func (export "f64.div_ceil") (param $a f64) (param $b f64) (result f64) (f64.div_ceil (local.get $a) (local.get $b)))
12+
(func (export "f32.convert_ceil_i32_s") (param $a i32) (result f32) (f32.convert_ceil_i32_s (local.get $a)))
13+
(func (export "f32.convert_ceil_i32_u") (param $a i32) (result f32) (f32.convert_ceil_i32_u (local.get $a)))
14+
(func (export "f32.convert_ceil_i64_s") (param $a i64) (result f32) (f32.convert_ceil_i64_s (local.get $a)))
15+
(func (export "f32.convert_ceil_i64_u") (param $a i64) (result f32) (f32.convert_ceil_i64_u (local.get $a)))
16+
(func (export "f32.demote_ceil_f64") (param $a f64) (result f32) (f32.demote_ceil_f64 (local.get $a)))
17+
(func (export "f64.convert_ceil_i32_s") (param $a i32) (result f64) (f64.convert_ceil_i32_s (local.get $a)))
18+
(func (export "f64.convert_ceil_i32_u") (param $a i32) (result f64) (f64.convert_ceil_i32_u (local.get $a)))
19+
(func (export "f64.convert_ceil_i64_s") (param $a i64) (result f64) (f64.convert_ceil_i64_s (local.get $a)))
20+
(func (export "f64.convert_ceil_i64_u") (param $a i64) (result f64) (f64.convert_ceil_i64_u (local.get $a)))
21+
(func (export "f64.promote_ceil_f32") (param $a f32) (result f64) (f64.promote_ceil_f32 (local.get $a)))
22+
(func (export "f32.sqrt_floor") (param $a f32) (result f32) (f32.sqrt_floor (local.get $a)))
23+
(func (export "f32.add_floor") (param $a f32) (param $b f32) (result f32) (f32.add_floor (local.get $a) (local.get $b)))
24+
(func (export "f32.sub_floor") (param $a f32) (param $b f32) (result f32) (f32.sub_floor (local.get $a) (local.get $b)))
25+
(func (export "f32.mul_floor") (param $a f32) (param $b f32) (result f32) (f32.mul_floor (local.get $a) (local.get $b)))
26+
(func (export "f32.div_floor") (param $a f32) (param $b f32) (result f32) (f32.div_floor (local.get $a) (local.get $b)))
27+
(func (export "f64.sqrt_floor") (param $a f64) (result f64) (f64.sqrt_floor (local.get $a)))
28+
(func (export "f64.add_floor") (param $a f64) (param $b f64) (result f64) (f64.add_floor (local.get $a) (local.get $b)))
29+
(func (export "f64.sub_floor") (param $a f64) (param $b f64) (result f64) (f64.sub_floor (local.get $a) (local.get $b)))
30+
(func (export "f64.mul_floor") (param $a f64) (param $b f64) (result f64) (f64.mul_floor (local.get $a) (local.get $b)))
31+
(func (export "f64.div_floor") (param $a f64) (param $b f64) (result f64) (f64.div_floor (local.get $a) (local.get $b)))
32+
(func (export "f32.convert_floor_i32_s") (param $a i32) (result f32) (f32.convert_floor_i32_s (local.get $a)))
33+
(func (export "f32.convert_floor_i32_u") (param $a i32) (result f32) (f32.convert_floor_i32_u (local.get $a)))
34+
(func (export "f32.convert_floor_i64_s") (param $a i64) (result f32) (f32.convert_floor_i64_s (local.get $a)))
35+
(func (export "f32.convert_floor_i64_u") (param $a i64) (result f32) (f32.convert_floor_i64_u (local.get $a)))
36+
(func (export "f32.demote_floor_f64") (param $a f64) (result f32) (f32.demote_floor_f64 (local.get $a)))
37+
(func (export "f64.convert_floor_i32_s") (param $a i32) (result f64) (f64.convert_floor_i32_s (local.get $a)))
38+
(func (export "f64.convert_floor_i32_u") (param $a i32) (result f64) (f64.convert_floor_i32_u (local.get $a)))
39+
(func (export "f64.convert_floor_i64_s") (param $a i64) (result f64) (f64.convert_floor_i64_s (local.get $a)))
40+
(func (export "f64.convert_floor_i64_u") (param $a i64) (result f64) (f64.convert_floor_i64_u (local.get $a)))
41+
(func (export "f64.promote_floor_f32") (param $a f32) (result f64) (f64.promote_floor_f32 (local.get $a)))
42+
(func (export "f32.sqrt_trunc") (param $a f32) (result f32) (f32.sqrt_trunc (local.get $a)))
43+
(func (export "f32.add_trunc") (param $a f32) (param $b f32) (result f32) (f32.add_trunc (local.get $a) (local.get $b)))
44+
(func (export "f32.sub_trunc") (param $a f32) (param $b f32) (result f32) (f32.sub_trunc (local.get $a) (local.get $b)))
45+
(func (export "f32.mul_trunc") (param $a f32) (param $b f32) (result f32) (f32.mul_trunc (local.get $a) (local.get $b)))
46+
(func (export "f32.div_trunc") (param $a f32) (param $b f32) (result f32) (f32.div_trunc (local.get $a) (local.get $b)))
47+
(func (export "f64.sqrt_trunc") (param $a f64) (result f64) (f64.sqrt_trunc (local.get $a)))
48+
(func (export "f64.add_trunc") (param $a f64) (param $b f64) (result f64) (f64.add_trunc (local.get $a) (local.get $b)))
49+
(func (export "f64.sub_trunc") (param $a f64) (param $b f64) (result f64) (f64.sub_trunc (local.get $a) (local.get $b)))
50+
(func (export "f64.mul_trunc") (param $a f64) (param $b f64) (result f64) (f64.mul_trunc (local.get $a) (local.get $b)))
51+
(func (export "f64.div_trunc") (param $a f64) (param $b f64) (result f64) (f64.div_trunc (local.get $a) (local.get $b)))
52+
(func (export "f32.convert_trunc_i32_s") (param $a i32) (result f32) (f32.convert_trunc_i32_s (local.get $a)))
53+
(func (export "f32.convert_trunc_i32_u") (param $a i32) (result f32) (f32.convert_trunc_i32_u (local.get $a)))
54+
(func (export "f32.convert_trunc_i64_s") (param $a i64) (result f32) (f32.convert_trunc_i64_s (local.get $a)))
55+
(func (export "f32.convert_trunc_i64_u") (param $a i64) (result f32) (f32.convert_trunc_i64_u (local.get $a)))
56+
(func (export "f32.demote_trunc_f64") (param $a f64) (result f32) (f32.demote_trunc_f64 (local.get $a)))
57+
(func (export "f64.convert_trunc_i32_s") (param $a i32) (result f64) (f64.convert_trunc_i32_s (local.get $a)))
58+
(func (export "f64.convert_trunc_i32_u") (param $a i32) (result f64) (f64.convert_trunc_i32_u (local.get $a)))
59+
(func (export "f64.convert_trunc_i64_s") (param $a i64) (result f64) (f64.convert_trunc_i64_s (local.get $a)))
60+
(func (export "f64.convert_trunc_i64_u") (param $a i64) (result f64) (f64.convert_trunc_i64_u (local.get $a)))
61+
(func (export "f64.promote_trunc_f32") (param $a f32) (result f64) (f64.promote_trunc_f32 (local.get $a)))
62+
)
63+
64+
(assert_return (invoke "f64.sqrt_ceil" (f64.const 0x1.fffffffffffffp1023)) (f64.const 0x1p512))
65+
(assert_return (invoke "f64.sqrt_ceil" (f64.const 0x1.ffffffffffffep1023)) (f64.const 0x1.fffffffffffffp511))
66+
(assert_return (invoke "f32.convert_ceil_i32_s" (i32.const -1)) (f32.const -0x1p0))
67+
(assert_return (invoke "f32.convert_ceil_i32_s" (i32.const 2147483647)) (f32.const 0x1p31))
68+
(assert_return (invoke "f32.convert_ceil_i64_s" (i64.const 2251799817879552)) (f32.const 0x1.000002p51))
69+
(assert_return (invoke "f32.convert_ceil_i64_s" (i64.const -9221120237036896256)) (f32.const -0x1.ffdffep62))
70+
(assert_return (invoke "f64.convert_ceil_i64_s" (i64.const -9221120237036896256)) (f64.const -0x1.ffdfffffffp62))
71+
(assert_return (invoke "f64.convert_ceil_i64_s" (i64.const 9223372036854775807)) (f64.const 0x1p63))
72+
(assert_return (invoke "f64.convert_ceil_i64_u" (i64.const -9221120237036896256)) (f64.const 0x1.00100000008p63))
73+
(assert_return (invoke "f64.convert_ceil_i64_u" (i64.const 9223372036854775807)) (f64.const 0x1p63))
74+
(assert_return (invoke "f64.sqrt_floor" (f64.const 0x1.ffffffffffffdp1023)) (f64.const 0x1.ffffffffffffep511))
75+
(assert_return (invoke "f64.sqrt_floor" (f64.const 0x1.fffffffffffffp1023)) (f64.const 0x1.fffffffffffffp511))
76+
(assert_return (invoke "f64.add_floor" (f64.const 0x1.f333333333338p-983) (f64.const 0x1.3262a3d08p-1036)) (f64.const 0x1.f333333333338p-983))
77+
(assert_return (invoke "f64.add_floor" (f64.const -0x1.39dee72a8b9f5p527) (f64.const -0x1.fffffffffffffp1023)) (f64.const -inf))
78+
(assert_return (invoke "f64.add_floor" (f64.const 0x1.9738b89bc6e7fp-972) (f64.const 0x1.f333333333338p-983)) (f64.const 0x1.97771f022d4e5p-972))
79+
(assert_return (invoke "f64.add_floor" (f64.const -0x1.39dee72a8b9f5p527) (f64.const -0x1.fffffffffffffp1023)) (f64.const -inf))
80+
(assert_return (invoke "f64.sub_floor" (f64.const 0x1p-1074) (f64.const 0x1.ffffffffffffdp1023)) (f64.const -0x1.ffffffffffffdp1023))
81+
(assert_return (invoke "f64.sub_floor" (f64.const -0x1.2d0a2c4f1323ap-535) (f64.const 0x1.fffffffffffffp1023)) (f64.const -inf))
82+
(assert_return (invoke "f64.convert_floor_i64_s" (i64.const -4611686293305294848)) (f64.const -0x1.000001p62))
83+
(assert_return (invoke "f64.convert_floor_i64_s" (i64.const -4611694814520410111)) (f64.const -0x1.00002p62))
84+
(assert_return (invoke "f32.add_trunc" (f32.const -0x1.84153ep-52) (f32.const -0x1.2fe95p-72)) (f32.const -0x1.84155p-52))
85+
(assert_return (invoke "f32.add_trunc" (f32.const -0x1.84153ep-52) (f32.const 0x1.7f3bccp-25)) (f32.const 0x1.7f3bcap-25))
86+
(assert_return (invoke "f32.sub_trunc" (f32.const 0x1p-149) (f32.const 0x1.7a6bcap-3)) (f32.const -0x1.7a6bc8p-3))
87+
(assert_return (invoke "f32.sub_trunc" (f32.const 0x1p-149) (f32.const -0x1p1)) (f32.const 0x1p1))
88+
(assert_return (invoke "f32.mul_trunc" (f32.const 0x1p-149) (f32.const -0x1.84153ep-52)) (f32.const -0x0p+0))
89+
(assert_return (invoke "f32.mul_trunc" (f32.const 0x1p-149) (f32.const 0x1.000002p0)) (f32.const 0x1p-149))
90+
(assert_return (invoke "f32.div_trunc" (f32.const 0x1.7p-145) (f32.const 0x1.cep-142)) (f32.const 0x1.97d3aap-4))
91+
(assert_return (invoke "f32.div_trunc" (f32.const 0x1p-149) (f32.const -0x1.a3d70ap-15)) (f32.const -0x1.383p-135))
92+
(assert_return (invoke "f64.add_trunc" (f64.const -0x1.2d0a2c4f1323ap-535) (f64.const 0x1p0)) (f64.const 0x1.fffffffffffffp-1))
93+
(assert_return (invoke "f64.add_trunc" (f64.const -0x1.39dee72a8b9f5p527) (f64.const -0x1.fffffffffffffp1023)) (f64.const -0x1.fffffffffffffp1023))
94+
(assert_return (invoke "f64.sub_trunc" (f64.const 0x1p-1074) (f64.const 0x1p0)) (f64.const -0x1.fffffffffffffp-1))
95+
(assert_return (invoke "f64.sub_trunc" (f64.const 0x1p0) (f64.const 0x1.4ccccccccccccp-921)) (f64.const 0x1.fffffffffffffp-1))
96+
(assert_return (invoke "f64.mul_trunc" (f64.const -0x1.39dee72a8b9f5p527) (f64.const -0x1.39dee72a8b9f5p527)) (f64.const 0x1.fffffffffffffp1023))
97+
(assert_return (invoke "f64.mul_trunc" (f64.const -0x1.39dee72a8b9f5p527) (f64.const 0x1.3ec7a13ca219bp809)) (f64.const -0x1.fffffffffffffp1023))
98+
(assert_return (invoke "f64.div_trunc" (f64.const -0x1.39dee72a8b9f5p527) (f64.const 0x1p-1074)) (f64.const -0x1.fffffffffffffp1023))
99+
(assert_return (invoke "f64.div_trunc" (f64.const 0x1.3ec7a13ca219bp809) (f64.const 0x1p-1074)) (f64.const 0x1.fffffffffffffp1023))
100+
(assert_return (invoke "f32.convert_trunc_i32_s" (i32.const 1073741823)) (f32.const 0x1.fffffep29))
101+
(assert_return (invoke "f32.convert_trunc_i32_s" (i32.const -1073741825)) (f32.const -0x1p30))
102+
(assert_return (invoke "f32.convert_trunc_i64_s" (i64.const 1923660277)) (f32.const 0x1.caa2e6p30))
103+
(assert_return (invoke "f32.convert_trunc_i64_s" (i64.const -9223372036854775807)) (f32.const -0x0.ffffffp63))
104+
(assert_return (invoke "f32.demote_trunc_f64" (f64.const 0x1.d50afcab2f9p44)) (f32.const 0x1.d50afcp44))
105+
(assert_return (invoke "f32.demote_trunc_f64" (f64.const -0x1.d50afcab2f9p44)) (f32.const -0x1.d50afcp44))
106+
(assert_return (invoke "f64.convert_trunc_i64_s" (i64.const -9223372036854775807)) (f64.const -0x0.fffffffffffff8p63))
107+
(assert_return (invoke "f64.convert_trunc_i64_s" (i64.const 9223372036854775806)) (f64.const 0x0.fffffffffffff8p63))
108+
109+
(assert_return (invoke "f32.sqrt_ceil" (f32.const 0x1p-149)) (f32.const 0x1.6a09e8p-75))
110+
(assert_return (invoke "f32.add_ceil" (f32.const 0x1.fffffcp-127) (f32.const 0x1.7a6bcap-3)) (f32.const 0x1.7a6bccp-3))
111+
(assert_return (invoke "f32.sub_ceil" (f32.const 0x1p-149) (f32.const -0x0.ffffffp1)) (f32.const 0x1p1))
112+
(assert_return (invoke "f32.mul_ceil" (f32.const 0x1p-149) (f32.const 0x1.000002p0)) (f32.const 0x1p-148))
113+
(assert_return (invoke "f32.div_ceil" (f32.const 0x1p-149) (f32.const 0x1.fffffcp-127)) (f32.const 0x1.000004p-23))
114+
(assert_return (invoke "f64.add_ceil" (f64.const 0x1.7a6bca5c20a9fp-3) (f64.const 0x1.fffffffffffffp1023)) (f64.const inf))
115+
(assert_return (invoke "f64.sub_ceil" (f64.const 0x1.7a6bca5c20a9fp-3) (f64.const -0x1.fffffffffffffp1023)) (f64.const inf))
116+
(assert_return (invoke "f64.mul_ceil" (f64.const 0x1p-1074) (f64.const 0x1.9e3779b97f4a8p0)) (f64.const 0x1p-1073))
117+
(assert_return (invoke "f64.div_ceil" (f64.const 0x1p-1074) (f64.const 0x1.7a6bca5c20a9fp-3)) (f64.const 0x1.8p-1072))
118+
(assert_return (invoke "f32.convert_ceil_i32_u" (i32.const -1)) (f32.const 0x1p32))
119+
(assert_return (invoke "f32.convert_ceil_i64_u" (i64.const -9223372036854775807)) (f32.const 0x1.000002p63))
120+
(assert_return (invoke "f32.demote_ceil_f64" (f64.const 0x1.fffffcp-1052)) (f32.const 0x1p-149))
121+
(assert_return (invoke "f64.convert_ceil_i32_s" (i32.const -1073741825)) (f64.const -0x1.00000004p30))
122+
(assert_return (invoke "f64.convert_ceil_i32_u" (i32.const -1)) (f64.const 0x1.fffffffep31))
123+
(assert_return (invoke "f64.promote_ceil_f32" (f32.const 0x1.7a6bcap-3)) (f64.const 0x1.7a6bcap-3))
124+
(assert_return (invoke "f32.sqrt_floor" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75))
125+
(assert_return (invoke "f32.add_floor" (f32.const 0x1p-149) (f32.const -0x0.ffffffp1)) (f32.const -0x0.ffffffp1))
126+
(assert_return (invoke "f32.sub_floor" (f32.const 0x1p-149) (f32.const 0x1.7a6bcap-3)) (f32.const -0x1.7a6bcap-3))
127+
(assert_return (invoke "f32.mul_floor" (f32.const 0x1p-149) (f32.const -0x0.ffffffp1)) (f32.const -0x1p-148))
128+
(assert_return (invoke "f32.div_floor" (f32.const 0x1p-149) (f32.const -0x1p1)) (f32.const -0x1p-149))
129+
(assert_return (invoke "f64.mul_floor" (f64.const 0x1.3504f333f9de6p1) (f64.const -0x1.ffffffffffffdp1023)) (f64.const -inf))
130+
(assert_return (invoke "f64.div_floor" (f64.const 0x1.7a6bca5c20a9fp-3) (f64.const -0x1.f1e9af28p-1045)) (f64.const -inf))
131+
(assert_return (invoke "f32.convert_floor_i32_s" (i32.const -1073741825)) (f32.const -0x1.000002p30))
132+
(assert_return (invoke "f32.convert_floor_i32_u" (i32.const -1)) (f32.const 0x1.fffffep31))
133+
(assert_return (invoke "f32.convert_floor_i64_s" (i64.const -9223372036854775807)) (f32.const -0x1p63))
134+
(assert_return (invoke "f32.convert_floor_i64_u" (i64.const -9223372036854775807)) (f32.const 0x1p63))
135+
(assert_return (invoke "f32.demote_floor_f64" (f64.const -0x1p-1074)) (f32.const -0x1p-149))
136+
(assert_return (invoke "f64.convert_floor_i64_u" (i64.const -4503599627370499)) (f64.const 0x1.ffdffffffffffp63))
137+
138+
(assert_return (invoke "f64.convert_floor_i32_s" (i32.const -1073741825)) (f64.const -0x1.00000004p30))
139+
(assert_return (invoke "f64.convert_floor_i32_u" (i32.const -1)) (f64.const 0x1.fffffffep31))
140+
(assert_return (invoke "f64.promote_floor_f32" (f32.const 0x1.7a6bcap-3)) (f64.const 0x1.7a6bcap-3))
141+
(assert_return (invoke "f32.sqrt_trunc" (f32.const 0x1p-149)) (f32.const 0x1.6a09e6p-75))
142+
(assert_return (invoke "f64.sqrt_trunc" (f64.const 0x1.ffffffffffffdp1023)) (f64.const 0x1.ffffffffffffep511))
143+
(assert_return (invoke "f64.sqrt_trunc" (f64.const 0x1.fffffffffffffp1023)) (f64.const 0x1.fffffffffffffp511))
144+
(assert_return (invoke "f32.convert_trunc_i32_u" (i32.const -1)) (f32.const 0x1.fffffep31))
145+
(assert_return (invoke "f32.convert_trunc_i64_u" (i64.const -9223372036854775807)) (f32.const 0x1p63))
146+
(assert_return (invoke "f64.convert_trunc_i32_s" (i32.const -1073741825)) (f64.const -0x1.00000004p30))
147+
(assert_return (invoke "f64.convert_trunc_i32_u" (i32.const -1)) (f64.const 0x1.fffffffep31))
148+
(assert_return (invoke "f64.convert_trunc_i64_u" (i64.const -4503599627370499)) (f64.const 0x1.ffdffffffffffp63))
149+
(assert_return (invoke "f64.promote_trunc_f32" (f32.const 0x1.7a6bcap-3)) (f64.const 0x1.7a6bcap-3))

0 commit comments

Comments
 (0)