// Copyright 2015 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --expose-wasm load("test/mjsunit/wasm/wasm-constants.js"); function runSelect2(module, which, a, b) { assertEquals(which == 0 ? a : b, module.select(a, b)); } function testSelect2(type) { var kBodySize = 2; var kNameOffset = 21 + kBodySize + 1; for (var which = 0; which < 2; which++) { print("type = " + type + ", which = " + which); var data = bytes( // -- memory kDeclMemory, 12, 12, 1, // memory // -- signatures kDeclSignatures, 1, 2, type, type, type, // signature: (t,t)->t // -- select kDeclFunctions, 1, kDeclFunctionName | kDeclFunctionExport, 0, 0, kNameOffset, 0, 0, 0, // name offset kBodySize, 0, // body size kExprGetLocal, which, // -- kDeclEnd, 's','e','l','e','c','t',0 // name ); var module = _WASMEXP_.instantiateModule(data); assertEquals("function", typeof module.select); runSelect2(module, which, 99, 97); runSelect2(module, which, -99, -97); if (type != kAstF32) { runSelect2(module, which, 0x80000000 | 0, 0x7fffffff | 0); runSelect2(module, which, 0x80000001 | 0, 0x7ffffffe | 0); runSelect2(module, which, 0xffffffff | 0, 0xfffffffe | 0); runSelect2(module, which, -2147483647, 2147483646); runSelect2(module, which, -2147483646, 2147483645); runSelect2(module, which, -2147483648, 2147483647); } if (type != kAstI32 && type != kAstI64) { runSelect2(module, which, -1.25, 5.25); runSelect2(module, which, Infinity, -Infinity); } } } testSelect2(kAstI32); testSelect2(kAstF32); testSelect2(kAstF64); function runSelect10(module, which, a, b) { var x = -1; var result = [ module.select(a, b, x, x, x, x, x, x, x, x), module.select(x, a, b, x, x, x, x, x, x, x), module.select(x, x, a, b, x, x, x, x, x, x), module.select(x, x, x, a, b, x, x, x, x, x), module.select(x, x, x, x, a, b, x, x, x, x), module.select(x, x, x, x, x, a, b, x, x, x), module.select(x, x, x, x, x, x, a, b, x, x), module.select(x, x, x, x, x, x, x, a, b, x), module.select(x, x, x, x, x, x, x, x, a, b), module.select(x, x, x, x, x, x, x, x, x, a) ]; for (var i = 0; i < 10; i++) { if (which == i) assertEquals(a, result[i]); else if (which == i+1) assertEquals(b, result[i]); else assertEquals(x, result[i]); } } function testSelect10(type) { var kBodySize = 2; var kNameOffset = 29 + kBodySize + 1; for (var which = 0; which < 10; which++) { print("type = " + type + ", which = " + which); var t = type; var data = bytes( kDeclMemory, 12, 12, 1, // memory // signatures kDeclSignatures, 1, 10, t,t,t,t,t,t,t,t,t,t,t, // (tx10)->t // main function kDeclFunctions, 1, kDeclFunctionName | kDeclFunctionExport, 0, 0, kNameOffset, 0, 0, 0, // name offset kBodySize, 0, // body size kExprGetLocal, which, // -- kDeclEnd, 's','e','l','e','c','t',0 // name ); var module = _WASMEXP_.instantiateModule(data); assertEquals("function", typeof module.select); runSelect10(module, which, 99, 97); runSelect10(module, which, -99, -97); if (type != kAstF32) { runSelect10(module, which, 0x80000000 | 0, 0x7fffffff | 0); runSelect10(module, which, 0x80000001 | 0, 0x7ffffffe | 0); runSelect10(module, which, 0xffffffff | 0, 0xfffffffe | 0); runSelect10(module, which, -2147483647, 2147483646); runSelect10(module, which, -2147483646, 2147483645); runSelect10(module, which, -2147483648, 2147483647); } if (type != kAstI32 && type != kAstI64) { runSelect10(module, which, -1.25, 5.25); runSelect10(module, which, Infinity, -Infinity); } } } testSelect10(kAstI32); testSelect10(kAstF32); testSelect10(kAstF64);