tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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