| // Copyright (C) 2016 ecmascript_simd authors. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| esid: pending |
| description: Test SIMD operators. |
| includes: [simdUtilities.js] |
| ---*/ |
| |
| function testOperators(type) { |
| var inst = createTestValue(type); |
| assert.throws(TypeError, function() { Number(inst) }); |
| assert.throws(TypeError, function() { +inst }); |
| assert.throws(TypeError, function() { -inst }); |
| assert.throws(TypeError, function() { ~inst }); |
| assert.throws(TypeError, function() { Math.fround(inst) }); |
| assert.throws(TypeError, function() { inst|0} ); |
| assert.throws(TypeError, function() { inst&0 }); |
| assert.throws(TypeError, function() { inst^0 }); |
| assert.throws(TypeError, function() { inst>>>0 }); |
| assert.throws(TypeError, function() { inst>>0 }); |
| assert.throws(TypeError, function() { inst<<0 }); |
| assert.throws(TypeError, function() { (inst + inst) }); |
| assert.throws(TypeError, function() { inst - inst }); |
| assert.throws(TypeError, function() { inst * inst }); |
| assert.throws(TypeError, function() { inst / inst }); |
| assert.throws(TypeError, function() { inst % inst }); |
| assert.throws(TypeError, function() { inst < inst }); |
| assert.throws(TypeError, function() { inst > inst }); |
| assert.throws(TypeError, function() { inst <= inst }); |
| assert.throws(TypeError, function() { inst >= inst }); |
| assert.throws(TypeError, function() { inst(); }); |
| |
| assert.sameValue(inst[0], undefined); |
| assert.sameValue(inst.a, undefined); |
| assert.sameValue(!inst, false); |
| assert.sameValue(!inst, false); |
| assert.sameValue(inst ? 1 : 2, 1); |
| assert.sameValue(inst ? 1 : 2, 1); |
| |
| assert.sameValue('function', typeof inst.toString); |
| assert.sameValue('function', typeof inst.toLocaleString); |
| assert.sameValue(inst.toLocaleString(), simdToLocaleString(type, inst)); |
| |
| var eval_value = eval(inst.toString()); |
| var value = type.fn.check(inst); |
| for(var i = 0; i < type.lanes; i++) { |
| assert.sameValue(type.fn.extractLane(eval_value, i), |
| type.fn.extractLane(value, i)); |
| } |
| // TODO: test valueOf? |
| } |
| |
| simdTypes.forEach(function(type) { |
| testSimdFunction(type.name + ' operators', function() { |
| testOperators(type); |
| }); |
| }); |