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