summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/cacheir/typed-array-intrinsics.js
blob: 788122bc790e85cc4ba288e3536699305e725f1d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
var ab = new ArrayBuffer(128);
var uint8c = new Uint8ClampedArray(ab, 3);
var int16 = new Int16Array(ab, 2);
var int32 = new Int32Array(ab, 4);
var float32 = new Float32Array(ab, 0);
var float64 = new Float64Array(ab, 64);
var bigInt64 = new BigInt64Array(ab, 32);

var uint8cProxy = new Proxy(uint8c, {});
var g = newGlobal({newCompartment: true});
var uint8cWrapped = g.evaluate("new Uint8ClampedArray(10)");

var TypedArrayElementSize = getSelfHostedValue("TypedArrayElementSize");
var TypedArrayByteOffset = getSelfHostedValue("TypedArrayByteOffset");
var IsTypedArray = getSelfHostedValue("IsTypedArray");
var IsPossiblyWrappedTypedArray = getSelfHostedValue("IsPossiblyWrappedTypedArray");
var TypedArrayLength = getSelfHostedValue("TypedArrayLength");

function testElementSize() {
    function getSize(ta) {
        return TypedArrayElementSize(ta);
    }
    assertEq(getSize(uint8c), 1);
    assertEq(getSize(int16), 2);
    assertEq(getSize(int32), 4);
    assertEq(getSize(float32), 4);
    assertEq(getSize(float64), 8);
    assertEq(getSize(bigInt64), 8);
}

function testByteOffset() {
    function getOffset(ta) {
        return TypedArrayByteOffset(ta);
    }
    assertEq(getOffset(uint8c), 3);
    assertEq(getOffset(int16), 2);
    assertEq(getOffset(int32), 4);
    assertEq(getOffset(float32), 0);
    assertEq(getOffset(float64), 64);
    assertEq(getOffset(bigInt64), 32);
}

function testIsTypedArray() {
    function isTA(obj) {
        return IsTypedArray(obj);
    }
    assertEq(isTA(uint8c), true);
    assertEq(isTA(int16), true);
    assertEq(isTA(int32), true);
    assertEq(isTA(float32), true);
    assertEq(isTA(float64), true);
    assertEq(isTA(bigInt64), true);
    assertEq(isTA(Math), false);
    assertEq(isTA(ab), false);
    assertEq(isTA(uint8cProxy), false);
    assertEq(isTA(uint8cWrapped), false);
}

function testIsPossiblyWrappedTypedArray() {
    function isTA(obj) {
        return IsPossiblyWrappedTypedArray(obj);
    }
    assertEq(isTA(uint8c), true);
    assertEq(isTA(int16), true);
    assertEq(isTA(int32), true);
    assertEq(isTA(float32), true);
    assertEq(isTA(float64), true);
    assertEq(isTA(bigInt64), true);
    assertEq(isTA(Math), false);
    assertEq(isTA(ab), false);
    assertEq(isTA(uint8cProxy), false);
    assertEq(isTA(uint8cWrapped), true);
}

function testTypedArrayLength() {
    function getLength(obj) {
        return TypedArrayLength(obj);
    }
    assertEq(getLength(uint8c), 125);
    assertEq(getLength(int16), 63);
    assertEq(getLength(int32), 31);
    assertEq(getLength(float32), 32);
    assertEq(getLength(float64), 8);
    assertEq(getLength(bigInt64), 12);
}

for (var i = 0; i < 40; i++) {
    testElementSize();
    testByteOffset();
    testIsTypedArray();
    testIsPossiblyWrappedTypedArray();
    testTypedArrayLength();
}