| Index: test/tests/typedObjects.js |
| diff --git a/test/tests/typedObjects.js b/test/tests/typedObjects.js |
| index 83ee6c4dd0ed0a08d78a6a62d7e5975af2f3d523..fea95d5327c32fe9f598ac62d8b976644c7b89ac 100644 |
| --- a/test/tests/typedObjects.js |
| +++ b/test/tests/typedObjects.js |
| @@ -17,6 +17,7 @@ |
| (function() |
| { |
| + "use strict"; |
| module("Typed objects"); |
| test("Math utilities", function() |
| @@ -711,6 +712,81 @@ |
| equal(array.unshift(0, 9), 4, "Unshifting returns new length"); |
| deepEqual(array.toJS(), [0, 9, 4, 5], "Unshifting two elements succeeded"); |
| + let sliced = array.slice(1, 3); |
| + deepEqual(sliced.toJS(), [9, 4], "Slicing an array works"); |
| + sliced.release(); |
| + deepEqual(sliced.toJS(), [], "Releasing a sliced array works"); |
| + deepEqual(array.toJS(), [0, 9, 4, 5], "Releasing a sliced array does not release the parent"); |
| + array.release(); |
| + deepEqual(array.toJS(), [], "Releasing a previously sliced array works"); |
| + |
| + array = uint32Array(); |
| + array.push(0, 9, 4, 5); |
| + sliced = array.slice(); |
| + array.release(); |
| + deepEqual(sliced.toJS(), [0, 9, 4, 5], "Releasing a parent does not release a sliced array"); |
| + sliced.release(); |
| + deepEqual(sliced.toJS(), [], "Releasing a parent and sliced array does release a sliced array"); |
| + |
| + array = uint32Array(); |
| + array.push(0, 9, 4, 5); |
| + sliced = array.slice(3); |
| + deepEqual(sliced.toJS(), [5], "Array slicing adjusts byteOffset correctly"); |
| + deepEqual(array.toJS(), [0, 9, 4, 5], "Slicing an array does not alter the original array"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(0); |
| + deepEqual(sliced.toJS(), [0, 9, 4, 5], "Slicing can be used as 'copy'"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(-2); |
| + deepEqual(sliced.toJS(), [4, 5], "Slicing supports negative start index"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(-10); |
| + deepEqual(sliced.toJS(), [0, 9, 4, 5], "Slicing supports excessive negative start index"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(-3, -1); |
| + deepEqual(sliced.toJS(), [9, 4], "Slicing supports negative start and end index"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(-10, -100); |
| + deepEqual(sliced.toJS(), [], "Slicing supports excessive negative start and end index"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(1, -1); |
| + deepEqual(sliced.toJS(), [9, 4], "Slicing supports negative end index"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(1, 3); |
| + deepEqual(sliced.toJS(), [9, 4], "Slicing supports positive end index"); |
| + array.set(1, 8); |
| + deepEqual(sliced.toJS(), [8, 4], "Sliced arrays rely on shared data"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(1, 300); |
| + deepEqual(sliced.toJS(), [8, 4, 5], "Slicing supports excessive positive end index"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(100, 300); |
| + deepEqual(sliced.toJS(), [], "Slicing supports excessive positive start and end index"); |
| + sliced.release(); |
| + |
| + sliced = array.slice(); |
| + throws(() => array.length = 1, "Length of sliced array is read only"); |
| + throws(() => sliced.length = 1, "Length of sliced array result is read only"); |
| + |
| + equal(array._refCount, 2, "Slicing an array increases it's refcount"); |
| + equal(sliced._refCount, 1, "Sliced arrays have a seperate refcount"); |
| + sliced.release(); |
| + equal(array._refCount, 1, "Releasing a sliced array decreases parent's refcount"); |
| + |
| + array = uint32Array(); |
| + array.push(0, 9, 4, 5, 6, 7); |
| + array.length = 4; |
| + equal(array.length, 4, "Length of non-sliced array is writable"); |
| + |
| equal(array.shift(), 0, "Shifting returns element"); |
| equal(array.shift(), 9, "Shifting returns element"); |
| deepEqual(array.toJS(), [4, 5], "Shifting by two elements succeeded"); |