tor-browser

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

valid-values.js (10161B)


      1 // Copyright (C) 2021 Rick Waldron. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 esid: sec-set.prototype.add
      5 description: Observing the expected behavior of valid values
      6 info: |
      7  Set.prototype.add ( value )
      8 
      9  ...
     10  For each element e of entries, do
     11    If e is not empty and SameValueZero(e, value) is true, then
     12    Return S.
     13  If value is -0, set value to +0.
     14  Append value as the last element of entries.
     15  ...
     16 
     17 features: [BigInt, Symbol, TypedArray, WeakRef, exponentiation]
     18 ---*/
     19 
     20 
     21 const negativeZero = -0;
     22 const positiveZero = +0;
     23 const zero = 0;
     24 const one = 1;
     25 const twoRaisedToFiftyThreeMinusOne = 2 ** 53 - 1;
     26 const int32Array = new Int32Array([zero, one]);
     27 const uint32Array = new Uint32Array([zero, one]);
     28 const n = 100000000000000000000000000000000000000000000000000000000000000000000000000000000001n;
     29 const bigInt = BigInt('100000000000000000000000000000000000000000000000000000000000000000000000000000000001');
     30 const n1 = 1n;
     31 const n53 = 9007199254740991n;
     32 const fiftyThree = BigInt('9007199254740991');
     33 const bigInt64Array = new BigInt64Array([n1, n53]);
     34 const bigUint64Array = new BigUint64Array([n1, n53]);
     35 const symbol = Symbol('');
     36 const object = {};
     37 const array = [];
     38 const string = '';
     39 const booleanTrue = true;
     40 const booleanFalse = true;
     41 const functionExprValue = function() {};
     42 const arrowFunctionValue = () => {};
     43 const classValue = class {};
     44 const map = new Map();
     45 const set = new Set();
     46 const weakMap = new WeakMap();
     47 const weakRef = new WeakRef({});
     48 const weakSet = new WeakSet();
     49 const nullValue = null;
     50 const undefinedValue = undefined;
     51 let unassigned;
     52 
     53 {
     54  const s = new Set([negativeZero, negativeZero]);
     55  assert.sameValue(s.size, 1);
     56  assert.sameValue(s.has(negativeZero), true);
     57  s.delete(negativeZero);
     58  assert.sameValue(s.size, 0);
     59  s.add(negativeZero);
     60  assert.sameValue(s.has(negativeZero), true);
     61  assert.sameValue(s.size, 1);
     62 };
     63 
     64 {
     65  const s = new Set([positiveZero, positiveZero]);
     66  assert.sameValue(s.size, 1);
     67  assert.sameValue(s.has(positiveZero), true);
     68  s.delete(positiveZero);
     69  assert.sameValue(s.size, 0);
     70  s.add(positiveZero);
     71  assert.sameValue(s.has(positiveZero), true);
     72  assert.sameValue(s.size, 1);
     73 };
     74 
     75 {
     76  const s = new Set([zero, zero]);
     77  assert.sameValue(s.size, 1);
     78  assert.sameValue(s.has(zero), true);
     79  s.delete(zero);
     80  assert.sameValue(s.size, 0);
     81  s.add(zero);
     82  assert.sameValue(s.has(zero), true);
     83  assert.sameValue(s.size, 1);
     84 };
     85 
     86 {
     87  const s = new Set([one, one]);
     88  assert.sameValue(s.size, 1);
     89  assert.sameValue(s.has(one), true);
     90  s.delete(one);
     91  assert.sameValue(s.size, 0);
     92  s.add(one);
     93  assert.sameValue(s.has(one), true);
     94  assert.sameValue(s.size, 1);
     95 };
     96 
     97 {
     98  const s = new Set([twoRaisedToFiftyThreeMinusOne, twoRaisedToFiftyThreeMinusOne]);
     99  assert.sameValue(s.size, 1);
    100  assert.sameValue(s.has(twoRaisedToFiftyThreeMinusOne), true);
    101  s.delete(twoRaisedToFiftyThreeMinusOne);
    102  assert.sameValue(s.size, 0);
    103  s.add(twoRaisedToFiftyThreeMinusOne);  assert.sameValue(s.has(twoRaisedToFiftyThreeMinusOne), true);
    104  assert.sameValue(s.size, 1);
    105 };
    106 
    107 {
    108  const s = new Set([int32Array, int32Array]);
    109  assert.sameValue(s.size, 1);
    110  assert.sameValue(s.has(int32Array), true);
    111  s.delete(int32Array);
    112  assert.sameValue(s.size, 0);
    113  s.add(int32Array);
    114  assert.sameValue(s.has(int32Array), true);
    115  assert.sameValue(s.size, 1);
    116 };
    117 
    118 {
    119  const s = new Set([uint32Array, uint32Array]);
    120  assert.sameValue(s.size, 1);
    121  assert.sameValue(s.has(uint32Array), true);
    122  s.delete(uint32Array);
    123  assert.sameValue(s.size, 0);
    124  s.add(uint32Array);
    125  assert.sameValue(s.has(uint32Array), true);
    126  assert.sameValue(s.size, 1);
    127 };
    128 
    129 {
    130  const s = new Set([n, n]);
    131  assert.sameValue(s.size, 1);
    132  assert.sameValue(s.has(n), true);
    133  s.delete(n);
    134  assert.sameValue(s.size, 0);
    135  s.add(n);
    136  assert.sameValue(s.has(n), true);
    137  assert.sameValue(s.size, 1);
    138 };
    139 
    140 {
    141  const s = new Set([bigInt, bigInt]);
    142  assert.sameValue(s.size, 1);
    143  assert.sameValue(s.has(bigInt), true);
    144  s.delete(bigInt);
    145  assert.sameValue(s.size, 0);
    146  s.add(bigInt);
    147  assert.sameValue(s.has(bigInt), true);
    148  assert.sameValue(s.size, 1);
    149 };
    150 
    151 {
    152  const s = new Set([n1, n1]);
    153  assert.sameValue(s.size, 1);
    154  assert.sameValue(s.has(n1), true);
    155  s.delete(n1);
    156  assert.sameValue(s.size, 0);
    157  s.add(n1);
    158  assert.sameValue(s.has(n1), true);
    159 }
    160 {  const s = new Set([n53, n53]);
    161  assert.sameValue(s.size, 1);
    162  assert.sameValue(s.has(n53), true);
    163  s.delete(n53);
    164  assert.sameValue(s.size, 0);
    165  s.add(n53);
    166  assert.sameValue(s.has(n53), true);
    167  assert.sameValue(s.size, 1);
    168 };
    169 
    170 {
    171  const s = new Set([fiftyThree, fiftyThree]);
    172  assert.sameValue(s.size, 1);
    173  assert.sameValue(s.has(fiftyThree), true);
    174  s.delete(fiftyThree);
    175  assert.sameValue(s.size, 0);
    176  s.add(fiftyThree);
    177  assert.sameValue(s.has(fiftyThree), true);
    178  assert.sameValue(s.size, 1);
    179 };
    180 
    181 {
    182  const s = new Set([bigInt64Array, bigInt64Array]);
    183  assert.sameValue(s.size, 1);
    184  assert.sameValue(s.has(bigInt64Array), true);
    185  s.delete(bigInt64Array);
    186  assert.sameValue(s.size, 0);
    187  s.add(bigInt64Array);
    188  assert.sameValue(s.has(bigInt64Array), true);
    189  assert.sameValue(s.size, 1);
    190 };
    191 
    192 {
    193  const s = new Set([bigUint64Array, bigUint64Array]);
    194  assert.sameValue(s.size, 1);
    195  assert.sameValue(s.has(bigUint64Array), true);
    196  s.delete(bigUint64Array);
    197  assert.sameValue(s.size, 0);
    198  s.add(bigUint64Array);
    199  assert.sameValue(s.has(bigUint64Array), true);
    200  assert.sameValue(s.size, 1);
    201 };
    202 
    203 {
    204  const s = new Set([symbol, symbol]);
    205  assert.sameValue(s.size, 1);
    206  assert.sameValue(s.has(symbol), true);
    207  s.delete(symbol);
    208  assert.sameValue(s.size, 0);
    209  s.add(symbol);
    210  assert.sameValue(s.has(symbol), true);
    211  assert.sameValue(s.size, 1);
    212 };
    213 
    214 {
    215  const s = new Set([object, object]);
    216  assert.sameValue(s.size, 1);
    217  assert.sameValue(s.has(object), true);
    218  s.delete(object);
    219  assert.sameValue(s.size, 0);
    220  s.add(object);
    221  assert.sameValue(s.has(object), true);
    222  assert.sameValue(s.size, 1);
    223 };
    224 
    225 {
    226  const s = new Set([array, array]);
    227  assert.sameValue(s.size, 1);
    228  assert.sameValue(s.has(array), true);
    229  s.delete(array);
    230  assert.sameValue(s.size, 0);
    231  s.add(array);
    232  assert.sameValue(s.has(array), true);
    233  assert.sameValue(s.size, 1);
    234 };
    235 
    236 {
    237  const s = new Set([string, string]);
    238  assert.sameValue(s.size, 1);
    239  assert.sameValue(s.has(string), true);
    240  s.delete(string);
    241  assert.sameValue(s.size, 0);
    242  s.add(string);
    243  assert.sameValue(s.has(string), true);
    244  assert.sameValue(s.size, 1);
    245 };
    246 
    247 {
    248  const s = new Set([booleanTrue, booleanTrue]);
    249  assert.sameValue(s.size, 1);
    250  assert.sameValue(s.has(booleanTrue), true);
    251  s.delete(booleanTrue);
    252  assert.sameValue(s.size, 0);
    253  s.add(booleanTrue);
    254  assert.sameValue(s.has(booleanTrue), true);
    255  assert.sameValue(s.size, 1);
    256 };
    257 
    258 {
    259  const s = new Set([booleanFalse, booleanFalse]);
    260  assert.sameValue(s.size, 1);
    261  assert.sameValue(s.has(booleanFalse), true);
    262  s.delete(booleanFalse);
    263  assert.sameValue(s.size, 0);
    264  s.add(booleanFalse);
    265  assert.sameValue(s.has(booleanFalse), true);
    266  assert.sameValue(s.size, 1);
    267 };
    268 
    269 {
    270  const s = new Set([functionExprValue, functionExprValue]);
    271  assert.sameValue(s.size, 1);
    272  assert.sameValue(s.has(functionExprValue), true);
    273  s.delete(functionExprValue);
    274  assert.sameValue(s.size, 0);
    275  s.add(functionExprValue);  assert.sameValue(s.has(functionExprValue), true);
    276  assert.sameValue(s.size, 1);
    277 };
    278 
    279 {
    280  const s = new Set([arrowFunctionValue, arrowFunctionValue]);
    281  assert.sameValue(s.size, 1);
    282  assert.sameValue(s.has(arrowFunctionValue), true);
    283  s.delete(arrowFunctionValue);
    284  assert.sameValue(s.size, 0);
    285  s.add(arrowFunctionValue);  assert.sameValue(s.has(arrowFunctionValue), true);
    286  assert.sameValue(s.size, 1);
    287 };
    288 
    289 {
    290  const s = new Set([classValue, classValue]);
    291  assert.sameValue(s.size, 1);
    292  assert.sameValue(s.has(classValue), true);
    293  s.delete(classValue);
    294  assert.sameValue(s.size, 0);
    295  s.add(classValue);
    296  assert.sameValue(s.has(classValue), true);
    297  assert.sameValue(s.size, 1);
    298 };
    299 
    300 {
    301  const s = new Set([map, map]);
    302  assert.sameValue(s.size, 1);
    303  assert.sameValue(s.has(map), true);
    304  s.delete(map);
    305  assert.sameValue(s.size, 0);
    306  s.add(map);
    307  assert.sameValue(s.has(map), true);
    308  assert.sameValue(s.size, 1);
    309 };
    310 
    311 {
    312  const s = new Set([set, set]);
    313  assert.sameValue(s.size, 1);
    314  assert.sameValue(s.has(set), true);
    315  s.delete(set);
    316  assert.sameValue(s.size, 0);
    317  s.add(set);
    318  assert.sameValue(s.has(set), true);
    319  assert.sameValue(s.size, 1);
    320 };
    321 
    322 {
    323  const s = new Set([weakMap, weakMap]);
    324  assert.sameValue(s.size, 1);
    325  assert.sameValue(s.has(weakMap), true);
    326  s.delete(weakMap);
    327  assert.sameValue(s.size, 0);
    328  s.add(weakMap);
    329  assert.sameValue(s.has(weakMap), true);
    330  assert.sameValue(s.size, 1);
    331 };
    332 
    333 {
    334  const s = new Set([weakRef, weakRef]);
    335  assert.sameValue(s.size, 1);
    336  assert.sameValue(s.has(weakRef), true);
    337  s.delete(weakRef);
    338  assert.sameValue(s.size, 0);
    339  s.add(weakRef);
    340  assert.sameValue(s.has(weakRef), true);
    341  assert.sameValue(s.size, 1);
    342 };
    343 
    344 {
    345  const s = new Set([weakSet, weakSet]);
    346  assert.sameValue(s.size, 1);
    347  assert.sameValue(s.has(weakSet), true);
    348  s.delete(weakSet);
    349  assert.sameValue(s.size, 0);
    350  s.add(weakSet);
    351  assert.sameValue(s.has(weakSet), true);
    352  assert.sameValue(s.size, 1);
    353 };
    354 
    355 {
    356  const s = new Set([nullValue, nullValue]);
    357  assert.sameValue(s.size, 1);
    358  assert.sameValue(s.has(nullValue), true);
    359  s.delete(nullValue);
    360  assert.sameValue(s.size, 0);
    361  s.add(nullValue);
    362  assert.sameValue(s.has(nullValue), true);
    363  assert.sameValue(s.size, 1);
    364 };
    365 
    366 {
    367  const s = new Set([undefinedValue, undefinedValue]);
    368  assert.sameValue(s.size, 1);
    369  assert.sameValue(s.has(undefinedValue), true);
    370  s.delete(undefinedValue);
    371  assert.sameValue(s.size, 0);
    372  s.add(undefinedValue);
    373  assert.sameValue(s.has(undefinedValue), true);
    374  assert.sameValue(s.size, 1);
    375 };
    376 
    377 {
    378  const s = new Set([unassigned, unassigned]);
    379  assert.sameValue(s.size, 1);
    380  assert.sameValue(s.has(unassigned), true);
    381  s.delete(unassigned);
    382  assert.sameValue(s.size, 0);
    383  s.add(unassigned);
    384  assert.sameValue(s.has(unassigned), true);
    385  assert.sameValue(s.size, 1);
    386 };
    387 
    388 
    389 reportCompare(0, 0);