123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- package goja
- import (
- "testing"
- )
- /*
- func TestArrayBufferNew(t *testing.T) {
- const SCRIPT = `
- var b = new ArrayBuffer(16);
- b.byteLength;
- `
- testScript(SCRIPT, intToValue(16), t)
- }
- */
- func TestArrayBufferSetUint32(t *testing.T) {
- vm := New()
- b := vm._newArrayBuffer(vm.global.ArrayBufferPrototype, nil)
- b.data = make([]byte, 4)
- b.setUint32(0, 0xCAFEBABE, bigEndian)
- i := b.getUint32(0, bigEndian)
- if i != 0xCAFEBABE {
- t.Fatal(i)
- }
- i = b.getUint32(0, littleEndian)
- if i != 0xBEBAFECA {
- t.Fatal(i)
- }
- b.setUint32(0, 0xBEBAFECA, littleEndian)
- i = b.getUint32(0, bigEndian)
- if i != 0xCAFEBABE {
- t.Fatal(i)
- }
- }
- func TestArrayBufferSetInt32(t *testing.T) {
- vm := New()
- b := vm._newArrayBuffer(vm.global.ArrayBufferPrototype, nil)
- b.data = make([]byte, 4)
- b.setInt32(0, -42, littleEndian)
- if v := b.getInt32(0, littleEndian); v != -42 {
- t.Fatal(v)
- }
- b.setInt32(0, -42, bigEndian)
- if v := b.getInt32(0, bigEndian); v != -42 {
- t.Fatal(v)
- }
- }
- func TestNewUint8Array(t *testing.T) {
- const SCRIPT = `
- var a = new Uint8Array(1);
- a[0] = 42;
- a.byteLength === 1 && a.length === 1 && a[0] === 42;
- `
- testScript(SCRIPT, valueTrue, t)
- }
- func TestNewUint16Array(t *testing.T) {
- const SCRIPT = `
- var a = new Uint16Array(1);
- a[0] = 42;
- a.byteLength === 2 && a.length === 1 && a[0] === 42;
- `
- testScript(SCRIPT, valueTrue, t)
- }
- func TestTypedArraysSpeciesConstructor(t *testing.T) {
- const SCRIPT = `
- 'use strict';
- function MyArray() {
- var NewTarget = this.__proto__.constructor;
- return Reflect.construct(Uint16Array, arguments, NewTarget);
- }
- MyArray.prototype = Object.create(Uint16Array.prototype, {
- constructor: {
- value: MyArray,
- writable: true,
- configurable: true
- }
- });
- var a = new MyArray(1);
- Object.defineProperty(MyArray, Symbol.species, {value: Uint8Array, configurable: true});
- a[0] = 32767;
- var b = a.filter(function() {
- return true;
- });
- if (a[0] !== 32767) {
- throw new Error("a[0]=" + a[0]);
- }
- if (!(b instanceof Uint8Array)) {
- throw new Error("b instanceof Uint8Array");
- }
- if (b[0] != 255) {
- throw new Error("b[0]=" + b[0]);
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArrayFromArrayBuffer(t *testing.T) {
- const SCRIPT = `
- var buf = new ArrayBuffer(2);
- var a16 = new Uint16Array(buf);
- if (!(a16 instanceof Uint16Array)) {
- throw new Error("a16 is not an instance");
- }
- if (a16.buffer !== buf) {
- throw new Error("a16.buffer !== buf");
- }
- if (a16.length !== 1) {
- throw new Error("a16.length=" + a16.length);
- }
- var a8 = new Uint8Array(buf);
- a8.fill(0xAA);
- if (a16[0] !== 0xAAAA) {
- throw new Error("a16[0]=" + a16[0]);
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySetOverlapDifSize(t *testing.T) {
- const SCRIPT = `
- var buf = new ArrayBuffer(4);
- var src = new Uint8Array(buf, 1, 2);
- src[0] = 1;
- src[1] = 2;
- var dst = new Uint16Array(buf);
- dst.set(src);
- if (dst[0] !== 1 || dst[1] !== 2) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySetOverlapDifSize2(t *testing.T) {
- const SCRIPT = `
- var buf = new ArrayBuffer(4);
- var src = new Uint8Array(buf, 0, 2);
- src[0] = 1;
- src[1] = 2;
- var dst = new Uint16Array(buf);
- dst.set(src);
- if (dst[0] !== 1 || dst[1] !== 2) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySetOverlapDifSize3(t *testing.T) {
- const SCRIPT = `
- var buf = new ArrayBuffer(8);
- var src = new Uint8Array(buf, 2, 4);
- src[0] = 1;
- src[1] = 2;
- src[2] = 3;
- src[3] = 4;
- var dst = new Uint16Array(buf);
- dst.set(src);
- if (dst[0] !== 1 || dst[1] !== 2 || dst[2] !== 3 || dst[3] !== 4) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySetOverlapDifSize4(t *testing.T) {
- const SCRIPT = `
- var buf = new ArrayBuffer(10);
- var dst = new Uint8Array(buf, 2, 5);
- var src = new Uint16Array(buf);
- src[0] = 1;
- src[1] = 2;
- src[2] = 3;
- src[3] = 4;
- src[4] = 5;
- dst.set(src);
- if (dst[0] !== 1 || dst[1] !== 2 || dst[2] !== 3 || dst[3] !== 4 || dst[4] !== 5) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySetNoOverlapDifSizeForward(t *testing.T) {
- const SCRIPT = `
- var buf = new ArrayBuffer(10);
- var dst = new Uint8Array(buf, 7, 2);
- var src = new Uint16Array(buf, 0, 2);
- src[0] = 1;
- src[1] = 2;
- dst.set(src);
- if (dst[0] !== 1 || dst[1] !== 2 || src[0] !== 1 || src[1] !== 2) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySetNoOverlapDifSizeBackward(t *testing.T) {
- const SCRIPT = `
- var buf = new ArrayBuffer(10);
- var dst = new Uint8Array(buf, 0, 2);
- var src = new Uint16Array(buf, 6, 2);
- src[0] = 1;
- src[1] = 2;
- dst.set(src);
- if (dst[0] !== 1 || dst[1] !== 2 || src[0] !== 1 || src[1] !== 2) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySetNoOverlapDifSizeDifBuffers(t *testing.T) {
- const SCRIPT = `
- var dstBuf = new ArrayBuffer(1024);
- var dst = new Uint8Array(dstBuf, 0, 2);
- var src = new Uint16Array(2);
- src[0] = 1;
- src[1] = 2;
- dst.set(src);
- if (dst[0] !== 1 || dst[1] !== 2 || src[0] !== 1 || src[1] !== 2) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySliceSameType(t *testing.T) {
- const SCRIPT = `
- var src = Uint8Array.of(1,2,3,4);
- var dst = src.slice(1, 3);
- if (dst.length !== 2 || dst[0] !== 2 || dst[1] !== 3) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySliceDifType(t *testing.T) {
- const SCRIPT = `
- var src = Uint8Array.of(1,2,3,4);
- Object.defineProperty(Uint8Array, Symbol.species, {value: Uint16Array, configurable: true});
- var dst = src.slice(1, 3);
- if (!(dst instanceof Uint16Array)) {
- throw new Error("wrong dst type: " + dst);
- }
- if (dst.length !== 2 || dst[0] !== 2 || dst[1] !== 3) {
- throw new Error("dst: " + dst.join(","));
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySortComparatorReturnValueFloats(t *testing.T) {
- const SCRIPT = `
- var a = Float64Array.of(
- 5.97,
- 9.91,
- 4.13,
- 9.28,
- 3.29
- );
- a.sort( function(a, b) { return a - b; } );
- for (var i = 1; i < a.length; i++) {
- if (a[i] < a[i-1]) {
- throw new Error("Array is not sorted: " + a);
- }
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestTypedArraySortComparatorReturnValueNegZero(t *testing.T) {
- const SCRIPT = `
- var a = new Uint8Array([2, 1]);
- a.sort( function(a, b) { return a > b ? 0 : -0; } );
- for (var i = 1; i < a.length; i++) {
- if (a[i] < a[i-1]) {
- throw new Error("Array is not sorted: " + a);
- }
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
- func TestInt32ArrayNegativeIndex(t *testing.T) {
- const SCRIPT = `
- new Int32Array()[-1] === undefined;
- `
- testScript(SCRIPT, valueTrue, t)
- }
- func TestTypedArrayDeleteUnconfigurable(t *testing.T) {
- const SCRIPT = `
- try {
- (function() {
- 'use strict';
- delete Uint8Array.prototype.BYTES_PER_ELEMENT;
- })();
- } catch(e) {
- if (!(e instanceof TypeError)) {
- throw e;
- }
- if (!e.message.startsWith("Cannot delete property")) {
- throw e;
- }
- }
- `
- testScript(SCRIPT, _undefined, t)
- }
|