(type, func, check)
| 165 | |
| 166 | |
| 167 | function testCallBinopVoid(type, func, check) { |
| 168 | var passed_length = -1; |
| 169 | var passed_a = -1; |
| 170 | var passed_b = -1; |
| 171 | var args_a = -1; |
| 172 | var args_b = -1; |
| 173 | |
| 174 | var ffi = {q: {func: function(a, b) { |
| 175 | passed_length = arguments.length; |
| 176 | passed_a = a; |
| 177 | passed_b = b; |
| 178 | args_a = arguments[0]; |
| 179 | args_b = arguments[1]; |
| 180 | }}}; |
| 181 | |
| 182 | var builder = new WasmModuleBuilder(); |
| 183 | |
| 184 | builder.addImport("q", "func", makeSig_v_xx(type)); |
| 185 | builder.addFunction("main", makeSig_r_xx(kWasmI32, type)) |
| 186 | .addBody([ |
| 187 | kExprLocalGet, 0, // -- |
| 188 | kExprLocalGet, 1, // -- |
| 189 | kExprCallFunction, 0, // -- |
| 190 | kExprI32Const, 39, // -- |
| 191 | ]) |
| 192 | .exportFunc("main"); |
| 193 | |
| 194 | var main = builder.instantiate(ffi).exports.main; |
| 195 | |
| 196 | print("testCallBinopVoid", type); |
| 197 | |
| 198 | for (var i = 0; i < 100000; i += 10003.1) { |
| 199 | var a = 22.5 + i, b = 10.5 + i; |
| 200 | var r = main(a, b); |
| 201 | assertEquals(39, r); |
| 202 | assertEquals(2, passed_length); |
| 203 | var expected_a, expected_b; |
| 204 | switch (type) { |
| 205 | case kWasmI32: { |
| 206 | expected_a = a | 0; |
| 207 | expected_b = b | 0; |
| 208 | break; |
| 209 | } |
| 210 | case kWasmF32: { |
| 211 | expected_a = Math.fround(a); |
| 212 | expected_b = Math.fround(b); |
| 213 | break; |
| 214 | } |
| 215 | case kWasmF64: { |
| 216 | expected_a = a; |
| 217 | expected_b = b; |
| 218 | break; |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | assertEquals(expected_a, args_a); |
| 223 | assertEquals(expected_b, args_b); |
| 224 | assertEquals(expected_a, passed_a); |
no test coverage detected