change-array-by-copy.js (4576B)
1 // |jit-test| 2 3 load(libdir + 'array-compare.js'); 4 load(libdir + "asserts.js"); 5 6 var sequence = [1, 2, 3]; 7 let reversedSequence = sequence.toReversed(); 8 assertEq(arraysEqual(sequence, [1, 2, 3]), true); 9 assertEq(arraysEqual(reversedSequence, [3, 2, 1]), true); 10 11 sequence = [87, 3, 5, 888, 321, 42]; 12 var sortedSequence = sequence.toSorted((x, y) => (x >= y)); 13 assertEq(arraysEqual(sequence, [87, 3, 5, 888, 321, 42]), true); 14 assertEq(arraysEqual(sortedSequence, [3, 5, 42, 87, 321, 888]), true); 15 16 sequence = ["the", "quick", "fox", "jumped", "over", "the", "lazy", "dog"]; 17 sortedSequence = sequence.toSorted(); 18 assertEq(arraysEqual(sequence, ["the", "quick", "fox", "jumped", "over", "the", "lazy", "dog"]), true); 19 assertEq(arraysEqual(sortedSequence, ["dog", "fox", "jumped", "lazy", "over", "quick", "the", "the"]), true); 20 21 /* Test that the correct exception is thrown with a 22 non-function comparefn argument */ 23 assertThrowsInstanceOf(() => sequence.toSorted([1, 2, 3]), TypeError); 24 25 /* toSpliced */ 26 /* examples from: 27 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice */ 28 29 function unchanged(a) { 30 assertEq(arraysEqual(a, ['angel', 'clown', 'mandarin', 'sturgeon']), true); 31 } 32 33 // Remove no elements before index 2, insert "drum" 34 let myFish = ['angel', 'clown', 'mandarin', 'sturgeon'] 35 var myFishSpliced = myFish.toSpliced(2, 0, 'drum') 36 unchanged(myFish); 37 assertEq(arraysEqual(myFishSpliced, ['angel', 'clown', 'drum', 'mandarin', 'sturgeon']), true); 38 39 40 // Remove no elements before index 2, insert "drum" and "guitar" 41 var myFishSpliced = myFish.toSpliced(2, 0, 'drum', 'guitar'); 42 unchanged(myFish); 43 assertEq(arraysEqual(myFishSpliced, ['angel', 'clown', 'drum', 'guitar', 'mandarin', 'sturgeon']), true); 44 45 // Remove 1 element at index 3 46 let myFish1 = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'] 47 myFishSpliced = myFish1.toSpliced(3, 1); 48 assertEq(arraysEqual(myFish1, ['angel', 'clown', 'drum', 'mandarin', 'sturgeon']), true); 49 assertEq(arraysEqual(myFishSpliced, ['angel', 'clown', 'drum', 'sturgeon']), true); 50 51 // Remove 1 element at index 2, and insert 'trumpet' 52 let myFish2 = ['angel', 'clown', 'drum', 'sturgeon'] 53 myFishSpliced = myFish2.toSpliced(2, 1, 'trumpet'); 54 assertEq(arraysEqual(myFish2, ['angel', 'clown', 'drum', 'sturgeon']), true); 55 assertEq(arraysEqual(myFishSpliced, ['angel', 'clown', 'trumpet', 'sturgeon']), true); 56 57 // Remove 2 elements at index 0, and insert 'parrot', 'anemone', and 'blue' 58 let myFish3 = ['angel', 'clown', 'trumpet', 'sturgeon'] 59 myFishSpliced = myFish3.toSpliced(0, 2, 'parrot', 'anemone', 'blue'); 60 assertEq(arraysEqual(myFish3, ['angel', 'clown', 'trumpet', 'sturgeon']), true); 61 assertEq(arraysEqual(myFishSpliced, ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon']), true); 62 63 // Remove 2 elements, starting at index 2 64 let myFish4 = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon'] 65 myFishSpliced = myFish4.toSpliced(2, 2); 66 assertEq(arraysEqual(myFish4, ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon']), true); 67 assertEq(arraysEqual(myFishSpliced, ['parrot', 'anemone', 'sturgeon']), true); 68 69 // Remove 1 element from index -2 70 myFishSpliced = myFish.toSpliced(-2, 1); 71 unchanged(myFish); 72 assertEq(arraysEqual(myFishSpliced, ['angel', 'clown', 'sturgeon']), true); 73 74 // Remove all elements, starting from index 2 75 myFishSpliced = myFish.toSpliced(2); 76 unchanged(myFish); 77 assertEq(arraysEqual(myFishSpliced, ['angel', 'clown']), true); 78 79 /* with */ 80 sequence = [1, 2, 3]; 81 let seq_with = sequence.with(1, 42); 82 assertEq(arraysEqual(sequence, [1, 2, 3]), true); 83 assertEq(arraysEqual(seq_with, [1, 42, 3]), true); 84 assertEq(arraysEqual(sequence.with(-0, 42), [42, 2, 3]), true); 85 86 /* false/true => index 0/1 */ 87 assertEq(arraysEqual(sequence.with(false, 42), [42, 2, 3]), true); 88 assertEq(arraysEqual(sequence.with(true, 42), [1, 42, 3]), true); 89 90 /* null => 0 */ 91 assertEq(arraysEqual(sequence.with(null, 42), [42, 2, 3]), true); 92 /* [] => 0 */ 93 assertEq(arraysEqual(sequence.with([], 42), [42, 2, 3]), true); 94 95 assertEq(arraysEqual(sequence.with("2", 42), [1, 2, 42]), true); 96 97 /* Non-numeric indices => 0 */ 98 assertEq(arraysEqual(sequence.with("monkeys", 42), [42, 2, 3]), true); 99 assertEq(arraysEqual(sequence.with(undefined, 42), [42, 2, 3]), true); 100 assertEq(arraysEqual(sequence.with(function() {}, 42), [42, 2, 3]), true); 101 102 assertThrowsInstanceOf(() => sequence.with(3, 42), RangeError); 103 assertThrowsInstanceOf(() => sequence.with(5, 42), RangeError); 104 assertThrowsInstanceOf(() => sequence.with(-10, 42), RangeError); 105 assertThrowsInstanceOf(() => sequence.with(Infinity, 42), RangeError);