test262/test/built-ins/Simd/operators.js

59 lines
2.2 KiB
JavaScript

// 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);
});
});