2015-01-04 19:40:09 +11:00

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