Implement {map,set}.{size,empty}. Fixes #1648.

This commit is contained in:
Mike Bostock 2013-12-03 08:50:06 -08:00
Родитель 3234f47ad3
Коммит fc153902a6
6 изменённых файлов: 117 добавлений и 25 удалений

30
d3.js поставляемый
Просмотреть файл

@ -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 = {};

10
d3.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

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