Implement {map,set}.{size,empty}. Fixes #1648.
This commit is contained in:
Родитель
3234f47ad3
Коммит
fc153902a6
|
@ -276,12 +276,17 @@ d3 = function() {
|
|||
});
|
||||
return entries;
|
||||
},
|
||||
size: function() {
|
||||
var size = 0;
|
||||
for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size;
|
||||
return size;
|
||||
},
|
||||
empty: function() {
|
||||
for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false;
|
||||
return true;
|
||||
},
|
||||
forEach: function(f) {
|
||||
for (var key in this) {
|
||||
if (key.charCodeAt(0) === d3_map_prefixCode) {
|
||||
f.call(this, key.substring(1), this[key]);
|
||||
}
|
||||
}
|
||||
for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.substring(1), this[key]);
|
||||
}
|
||||
});
|
||||
var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
|
||||
|
@ -373,12 +378,17 @@ d3 = function() {
|
|||
});
|
||||
return values;
|
||||
},
|
||||
size: function() {
|
||||
var size = 0;
|
||||
for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) ++size;
|
||||
return size;
|
||||
},
|
||||
empty: function() {
|
||||
for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) return false;
|
||||
return true;
|
||||
},
|
||||
forEach: function(f) {
|
||||
for (var value in this) {
|
||||
if (value.charCodeAt(0) === d3_map_prefixCode) {
|
||||
f.call(this, value.substring(1));
|
||||
}
|
||||
}
|
||||
for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.substring(1));
|
||||
}
|
||||
});
|
||||
d3.behavior = {};
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -38,12 +38,17 @@ d3_class(d3_Map, {
|
|||
this.forEach(function(key, value) { entries.push({key: key, value: value}); });
|
||||
return entries;
|
||||
},
|
||||
size: function() {
|
||||
var size = 0;
|
||||
for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size;
|
||||
return size;
|
||||
},
|
||||
empty: function() {
|
||||
for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false;
|
||||
return true;
|
||||
},
|
||||
forEach: function(f) {
|
||||
for (var key in this) {
|
||||
if (key.charCodeAt(0) === d3_map_prefixCode) {
|
||||
f.call(this, key.substring(1), this[key]);
|
||||
}
|
||||
}
|
||||
for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.substring(1), this[key]);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -28,11 +28,16 @@ d3_class(d3_Set, {
|
|||
});
|
||||
return values;
|
||||
},
|
||||
size: function() {
|
||||
var size = 0;
|
||||
for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) ++size;
|
||||
return size;
|
||||
},
|
||||
empty: function() {
|
||||
for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) return false;
|
||||
return true;
|
||||
},
|
||||
forEach: function(f) {
|
||||
for (var value in this) {
|
||||
if (value.charCodeAt(0) === d3_map_prefixCode) {
|
||||
f.call(this, value.substring(1));
|
||||
}
|
||||
}
|
||||
for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.substring(1));
|
||||
}
|
||||
});
|
||||
|
|
|
@ -51,6 +51,42 @@ suite.addBatch({
|
|||
assert.isFalse(b.has("bar"));
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"returns the number of distinct keys": function(map) {
|
||||
var m = map();
|
||||
assert.deepEqual(m.size(), 0);
|
||||
m.set("foo", 1);
|
||||
assert.deepEqual(m.size(), 1);
|
||||
m.set("foo", 2);
|
||||
assert.deepEqual(m.size(), 1);
|
||||
m.set("bar", 2);
|
||||
assert.deepEqual(m.size(), 2);
|
||||
m.remove("foo");
|
||||
assert.deepEqual(m.size(), 1);
|
||||
m.remove("foo");
|
||||
assert.deepEqual(m.size(), 1);
|
||||
m.remove("bar");
|
||||
assert.deepEqual(m.size(), 0);
|
||||
}
|
||||
},
|
||||
"empty": {
|
||||
"returns true only if the map is empty": function(map) {
|
||||
var m = map();
|
||||
assert.isTrue(m.empty());
|
||||
m.set("foo", 1);
|
||||
assert.isFalse(m.empty());
|
||||
m.set("foo", 2);
|
||||
assert.isFalse(m.empty());
|
||||
m.set("bar", 2);
|
||||
assert.isFalse(m.empty());
|
||||
m.remove("foo");
|
||||
assert.isFalse(m.empty());
|
||||
m.remove("foo");
|
||||
assert.isFalse(m.empty());
|
||||
m.remove("bar");
|
||||
assert.isTrue(m.empty());
|
||||
}
|
||||
},
|
||||
"forEach": {
|
||||
"empty maps have an empty keys array": function(map) {
|
||||
var m = map();
|
||||
|
|
|
@ -25,6 +25,42 @@ suite.addBatch({
|
|||
assert.isTrue(s.has("bar"));
|
||||
}
|
||||
},
|
||||
"size": {
|
||||
"returns the number of distinct values": function(set) {
|
||||
var s = set();
|
||||
assert.deepEqual(s.size(), 0);
|
||||
s.add("foo");
|
||||
assert.deepEqual(s.size(), 1);
|
||||
s.add("foo");
|
||||
assert.deepEqual(s.size(), 1);
|
||||
s.add("bar");
|
||||
assert.deepEqual(s.size(), 2);
|
||||
s.remove("foo");
|
||||
assert.deepEqual(s.size(), 1);
|
||||
s.remove("foo");
|
||||
assert.deepEqual(s.size(), 1);
|
||||
s.remove("bar");
|
||||
assert.deepEqual(s.size(), 0);
|
||||
}
|
||||
},
|
||||
"empty": {
|
||||
"returns true only if the set is empty": function(set) {
|
||||
var s = set();
|
||||
assert.isTrue(s.empty());
|
||||
s.add("foo");
|
||||
assert.isFalse(s.empty());
|
||||
s.add("foo");
|
||||
assert.isFalse(s.empty());
|
||||
s.add("bar");
|
||||
assert.isFalse(s.empty());
|
||||
s.remove("foo");
|
||||
assert.isFalse(s.empty());
|
||||
s.remove("foo");
|
||||
assert.isFalse(s.empty());
|
||||
s.remove("bar");
|
||||
assert.isTrue(s.empty());
|
||||
}
|
||||
},
|
||||
"forEach": {
|
||||
"empty sets have an empty values array": function(set) {
|
||||
var s = set();
|
||||
|
|
Загрузка…
Ссылка в новой задаче