// |reftest| skip-if(!this.hasOwnProperty('WeakRef')) -- WeakRef is not enabled unconditionally
// Copyright (C) 2021 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-set.prototype.add
description: Observing the expected behavior of valid values
info: |
Set.prototype.add ( value )
...
For each element e of entries, do
If e is not empty and SameValueZero(e, value) is true, then
Return S.
If value is -0, set value to +0.
Append value as the last element of entries.
...
features: [BigInt, Symbol, TypedArray, WeakRef, exponentiation]
---*/
const negativeZero = -0;
const positiveZero = +0;
const zero = 0;
const one = 1;
const twoRaisedToFiftyThreeMinusOne = 2 ** 53 - 1;
const int32Array = new Int32Array([zero, one]);
const uint32Array = new Uint32Array([zero, one]);
const n = 100000000000000000000000000000000000000000000000000000000000000000000000000000000001n;
const bigInt = BigInt('100000000000000000000000000000000000000000000000000000000000000000000000000000000001' );
const n1 = 1n;
const n53 = 9007199254740991n;
const fiftyThree = BigInt('9007199254740991' );
const bigInt64Array = new BigInt64Array([n1, n53]);
const bigUint64Array = new BigUint64Array([n1, n53]);
const symbol = Symbol('' );
const object = {};
const array = [];
const string = '' ;
const booleanTrue = true ;
const booleanFalse = true ;
const functionExprValue = function () {};
const arrowFunctionValue = () => {};
const classValue = class {};
const map = new Map();
const set = new Set();
const weakMap = new WeakMap();
const weakRef = new WeakRef({});
const weakSet = new WeakSet();
const nullValue = null ;
const undefinedValue = undefined;
let unassigned;
{
const s = new Set([negativeZero, negativeZero]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(negativeZero), true );
s.delete (negativeZero);
assert .sameValue(s.size, 0);
s.add(negativeZero);
assert .sameValue(s.has(negativeZero), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([positiveZero, positiveZero]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(positiveZero), true );
s.delete (positiveZero);
assert .sameValue(s.size, 0);
s.add(positiveZero);
assert .sameValue(s.has(positiveZero), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([zero, zero]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(zero), true );
s.delete (zero);
assert .sameValue(s.size, 0);
s.add(zero);
assert .sameValue(s.has(zero), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([one, one]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(one), true );
s.delete (one);
assert .sameValue(s.size, 0);
s.add(one);
assert .sameValue(s.has(one), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([twoRaisedToFiftyThreeMinusOne, twoRaisedToFiftyThreeMinusOne]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(twoRaisedToFiftyThreeMinusOne), true );
s.delete (twoRaisedToFiftyThreeMinusOne);
assert .sameValue(s.size, 0);
s.add(twoRaisedToFiftyThreeMinusOne); assert .sameValue(s.has(twoRaisedToFiftyThreeMinusOne), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([int32Array, int32Array]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(int32Array), true );
s.delete (int32Array);
assert .sameValue(s.size, 0);
s.add(int32Array);
assert .sameValue(s.has(int32Array), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([uint32Array, uint32Array]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(uint32Array), true );
s.delete (uint32Array);
assert .sameValue(s.size, 0);
s.add(uint32Array);
assert .sameValue(s.has(uint32Array), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([n, n]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(n), true );
s.delete (n);
assert .sameValue(s.size, 0);
s.add(n);
assert .sameValue(s.has(n), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([bigInt, bigInt]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(bigInt), true );
s.delete (bigInt);
assert .sameValue(s.size, 0);
s.add(bigInt);
assert .sameValue(s.has(bigInt), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([n1, n1]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(n1), true );
s.delete (n1);
assert .sameValue(s.size, 0);
s.add(n1);
assert .sameValue(s.has(n1), true );
}
{ const s = new Set([n53, n53]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(n53), true );
s.delete (n53);
assert .sameValue(s.size, 0);
s.add(n53);
assert .sameValue(s.has(n53), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([fiftyThree, fiftyThree]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(fiftyThree), true );
s.delete (fiftyThree);
assert .sameValue(s.size, 0);
s.add(fiftyThree);
assert .sameValue(s.has(fiftyThree), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([bigInt64Array, bigInt64Array]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(bigInt64Array), true );
s.delete (bigInt64Array);
assert .sameValue(s.size, 0);
s.add(bigInt64Array);
assert .sameValue(s.has(bigInt64Array), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([bigUint64Array, bigUint64Array]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(bigUint64Array), true );
s.delete (bigUint64Array);
assert .sameValue(s.size, 0);
s.add(bigUint64Array);
assert .sameValue(s.has(bigUint64Array), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([symbol, symbol]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(symbol), true );
s.delete (symbol);
assert .sameValue(s.size, 0);
s.add(symbol);
assert .sameValue(s.has(symbol), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([object, object]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(object), true );
s.delete (object);
assert .sameValue(s.size, 0);
s.add(object);
assert .sameValue(s.has(object), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([array, array]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(array), true );
s.delete (array);
assert .sameValue(s.size, 0);
s.add(array);
assert .sameValue(s.has(array), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([string, string]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(string), true );
s.delete (string);
assert .sameValue(s.size, 0);
s.add(string);
assert .sameValue(s.has(string), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([booleanTrue, booleanTrue]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(booleanTrue), true );
s.delete (booleanTrue);
assert .sameValue(s.size, 0);
s.add(booleanTrue);
assert .sameValue(s.has(booleanTrue), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([booleanFalse, booleanFalse]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(booleanFalse), true );
s.delete (booleanFalse);
assert .sameValue(s.size, 0);
s.add(booleanFalse);
assert .sameValue(s.has(booleanFalse), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([functionExprValue, functionExprValue]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(functionExprValue), true );
s.delete (functionExprValue);
assert .sameValue(s.size, 0);
s.add(functionExprValue); assert .sameValue(s.has(functionExprValue), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([arrowFunctionValue, arrowFunctionValue]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(arrowFunctionValue), true );
s.delete (arrowFunctionValue);
assert .sameValue(s.size, 0);
s.add(arrowFunctionValue); assert .sameValue(s.has(arrowFunctionValue), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([classValue, classValue]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(classValue), true );
s.delete (classValue);
assert .sameValue(s.size, 0);
s.add(classValue);
assert .sameValue(s.has(classValue), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([map, map]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(map), true );
s.delete (map);
assert .sameValue(s.size, 0);
s.add(map);
assert .sameValue(s.has(map), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([set, set]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(set), true );
s.delete (set);
assert .sameValue(s.size, 0);
s.add(set);
assert .sameValue(s.has(set), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([weakMap, weakMap]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(weakMap), true );
s.delete (weakMap);
assert .sameValue(s.size, 0);
s.add(weakMap);
assert .sameValue(s.has(weakMap), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([weakRef, weakRef]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(weakRef), true );
s.delete (weakRef);
assert .sameValue(s.size, 0);
s.add(weakRef);
assert .sameValue(s.has(weakRef), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([weakSet, weakSet]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(weakSet), true );
s.delete (weakSet);
assert .sameValue(s.size, 0);
s.add(weakSet);
assert .sameValue(s.has(weakSet), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([nullValue, nullValue]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(nullValue), true );
s.delete (nullValue);
assert .sameValue(s.size, 0);
s.add(nullValue);
assert .sameValue(s.has(nullValue), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([undefinedValue, undefinedValue]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(undefinedValue), true );
s.delete (undefinedValue);
assert .sameValue(s.size, 0);
s.add(undefinedValue);
assert .sameValue(s.has(undefinedValue), true );
assert .sameValue(s.size, 1);
};
{
const s = new Set([unassigned, unassigned]);
assert .sameValue(s.size, 1);
assert .sameValue(s.has(unassigned), true );
s.delete (unassigned);
assert .sameValue(s.size, 0);
s.add(unassigned);
assert .sameValue(s.has(unassigned), true );
assert .sameValue(s.size, 1);
};
reportCompare(0, 0);
Messung V0.5 C=91 H=96 G=93
¤ Dauer der Verarbeitung: 0.18 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland