143 lines
2.7 KiB
JavaScript
143 lines
2.7 KiB
JavaScript
var t = new Set();
|
|
|
|
var objectKey = {};
|
|
var stringKey = 'keykeykey';
|
|
var numberKey = 42.24;
|
|
var booleanKey = true;
|
|
var undefinedKey = undefined;
|
|
var nullKey = null;
|
|
var nanKey = NaN;
|
|
var zeroKey = 0;
|
|
var addReturnValue;
|
|
|
|
t.add(objectKey);
|
|
t.add(stringKey);
|
|
t.add(numberKey);
|
|
t.add(booleanKey);
|
|
t.add(undefinedKey);
|
|
t.add(nullKey);
|
|
t.add(nanKey);
|
|
addReturnValue = t.add(zeroKey);
|
|
|
|
assert.equal(t.size, 8);
|
|
assert.equal(t, addReturnValue);
|
|
|
|
assert.isTrue(!t.has({}));
|
|
|
|
assert.isTrue(t.has(objectKey));
|
|
assert.isTrue(t.has(stringKey));
|
|
assert.isTrue(t.has(numberKey));
|
|
assert.isTrue(t.has(booleanKey));
|
|
assert.isTrue(t.has(undefinedKey));
|
|
assert.isTrue(t.has(nullKey));
|
|
assert.isTrue(t.has(nanKey));
|
|
assert.isTrue(t.has(zeroKey));
|
|
|
|
assert.isTrue(t.has('keykeykey'));
|
|
assert.isTrue(t.has(42.24));
|
|
assert.isTrue(t.has(true));
|
|
assert.isTrue(t.has(undefined));
|
|
assert.isTrue(t.has(null));
|
|
assert.isTrue(t.has(NaN));
|
|
assert.isTrue(t.has(0));
|
|
assert.isTrue(t.has(-0));
|
|
|
|
var expected = [
|
|
undefinedKey,
|
|
nullKey,
|
|
stringKey,
|
|
numberKey,
|
|
booleanKey,
|
|
objectKey,
|
|
nanKey,
|
|
zeroKey
|
|
];
|
|
expected.sort();
|
|
|
|
|
|
// forEach
|
|
var arr = [];
|
|
var cnt = 0;
|
|
var context = {};
|
|
|
|
t.forEach(function(val, val2, obj) {
|
|
if (isNaN(val)) {
|
|
assert.isTrue(isNaN(val2));
|
|
} else {
|
|
assert.equal(val, val2);
|
|
}
|
|
assert.equal(obj, t);
|
|
assert.equal(this, context)
|
|
arr.push(val);
|
|
cnt++;
|
|
}, context);
|
|
|
|
assert.equal(cnt, 8);
|
|
|
|
arr.sort();
|
|
assertArrayEquals(arr, expected);
|
|
|
|
// iterator
|
|
arr = [];
|
|
cnt = 0;
|
|
|
|
for (var setIterVal of t) {
|
|
arr.push(setIterVal);
|
|
cnt++;
|
|
}
|
|
assert.equal(cnt, 8);
|
|
|
|
|
|
arr.sort();
|
|
assertArrayEquals(arr, expected);
|
|
|
|
// .values()
|
|
arr = [];
|
|
cnt = 0;
|
|
|
|
for (var setIterVal of t.values()) {
|
|
arr.push(setIterVal);
|
|
cnt++;
|
|
}
|
|
assert.equal(cnt, 8);
|
|
|
|
|
|
arr.sort();
|
|
assertArrayEquals(arr, expected);
|
|
|
|
var t3 = new Set([[], {}, NaN]);
|
|
assert.equal(t3.size, 3);
|
|
assert.isTrue(t3.has(NaN));
|
|
t3.delete(NaN);
|
|
assert.equal(t3.size, 2);
|
|
t3.delete(NaN);
|
|
assert.equal(t3.size, 2);
|
|
t3.clear();
|
|
assert.equal(t3.size, 0);
|
|
|
|
// .keys()
|
|
var t4 = new Set();
|
|
var iter = t4.keys();
|
|
t4.add(objectKey);
|
|
t4.add(stringKey);
|
|
t4.add(nanKey);
|
|
assert.deepEqual(iter.next(), {value: objectKey, done: false});
|
|
assert.deepEqual(iter.next(), {value: stringKey, done: false});
|
|
t4.delete(nanKey);
|
|
assert.deepEqual(iter.next(), {value: undefined, done: true});
|
|
|
|
assert.equal(Set.prototype.keys, Set.prototype.values);
|
|
|
|
// .entries()
|
|
var t5 = new Set();
|
|
var iter = t5.entries();
|
|
t5.add(objectKey);
|
|
t5.add(stringKey);
|
|
t5.add(nanKey);
|
|
assert.deepEqual(iter.next(), {value: [objectKey, objectKey], done: false});
|
|
assert.deepEqual(iter.next(), {value: [stringKey, stringKey], done: false});
|
|
t5.delete(nanKey);
|
|
assert.deepEqual(iter.next(), {value: undefined, done: true});
|
|
|
|
assert.equal(Set.prototype[Symbol.iterator], Set.prototype.values);
|