tor-browser

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

good-views.js (3020B)


      1 // |reftest| skip-if(!this.hasOwnProperty('Atomics')||!this.hasOwnProperty('SharedArrayBuffer')||(this.hasOwnProperty('getBuildConfiguration')&&getBuildConfiguration('arm64-simulator'))) -- Atomics,SharedArrayBuffer is not enabled unconditionally, ARM64 Simulator cannot emulate atomics
      2 // Copyright (C) 2018 Rick Waldron. All rights reserved.
      3 // This code is governed by the BSD license found in the LICENSE file.
      4 /*---
      5 esid: sec-atomics.xor
      6 description: Test Atomics.xor on arrays that allow atomic operations
      7 includes: [testAtomics.js, testBigIntTypedArray.js]
      8 features: [ArrayBuffer, Atomics, BigInt, DataView, SharedArrayBuffer, Symbol, TypedArray]
      9 ---*/
     10 // Make it interesting - use non-zero byteOffsets and non-zero indexes.
     11 // And again
     12 // In-bounds boundary cases for indexing
     13 // Atomics.store() computes an index from Idx in the same way as other
     14 // Atomics operations, not quite like view[Idx].
     15 const sab = new SharedArrayBuffer(1024);
     16 const ab = new ArrayBuffer(16);
     17 
     18 testWithBigIntTypedArrayConstructors(function(TA) {
     19  const view = new TA(sab, 32, 20);
     20  const control = new TA(ab, 0, 2);
     21  view[8] = 0x33333333n;
     22  control[0] = 0x33333333n;
     23 
     24  assert.sameValue(
     25    Atomics.xor(view, 8, 0x55555555n),
     26    control[0],
     27    'Atomics.xor(view, 8, 0x55555555n) returns the value of `control[0]` (0x33333333n)'
     28  );
     29 
     30  control[0] = 0x66666666n;
     31 
     32  assert.sameValue(
     33    view[8],
     34    control[0],
     35    'The value of view[8] equals the value of `control[0]` (0x66666666n)'
     36  );
     37 
     38  assert.sameValue(
     39    Atomics.xor(view, 8, 0xF0F0F0F0n),
     40    control[0],
     41    'Atomics.xor(view, 8, 0xF0F0F0F0) returns the value of `control[0]` (0x66666666n)'
     42  );
     43 
     44  control[0] = 0x96969696n;
     45 
     46  assert.sameValue(
     47    view[8],
     48    control[0],
     49    'The value of view[8] equals the value of `control[0]` (0x96969696n)'
     50  );
     51 
     52  view[3] = -5n;
     53  control[0] = -5n;
     54 
     55  assert.sameValue(
     56    Atomics.xor(view, 3, 0n),
     57    control[0],
     58    'Atomics.xor(view, 3, 0n) returns the value of `control[0]` (-5n)'
     59  );
     60 
     61  assert.sameValue(
     62    view[3],
     63    control[0],
     64    'The value of view[3] equals the value of `control[0]` (-5n)'
     65  );
     66 
     67  control[0] = 12345n;
     68  view[3] = 12345n;
     69 
     70  assert.sameValue(
     71    Atomics.xor(view, 3, 0n),
     72    control[0],
     73    'Atomics.xor(view, 3, 0n) returns the value of `control[0]` (12345n)'
     74  );
     75 
     76  assert.sameValue(
     77    view[3],
     78    control[0],
     79    'The value of view[3] equals the value of `control[0]` (12345n)'
     80  );
     81 
     82  control[0] = 123456789n;
     83  view[3] = 123456789n;
     84 
     85  assert.sameValue(
     86    Atomics.xor(view, 3, 0n),
     87    control[0],
     88    'Atomics.xor(view, 3, 0n) returns the value of `control[0]` (123456789n)'
     89  );
     90 
     91  assert.sameValue(
     92    view[3],
     93    control[0],
     94    'The value of view[3] equals the value of `control[0]` (123456789n)'
     95  );
     96 
     97  testWithAtomicsInBoundsIndices(function(IdxGen) {
     98    let Idx = IdxGen(view);
     99    view.fill(0n);
    100    Atomics.store(view, Idx, 37n);
    101    assert.sameValue(Atomics.xor(view, Idx, 0n), 37n, 'Atomics.xor(view, Idx, 0n) returns 37n');
    102  });
    103 });
    104 
    105 reportCompare(0, 0);