Skip to content

Commit 53baa54

Browse files
committed
Add internal set library
1 parent 7a631a0 commit 53baa54

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

lib/_set.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var L = require('_linklist');
2+
function Set() {
3+
this.list = {};
4+
L.init(this.list);
5+
}
6+
exports.Set = Set;
7+
8+
9+
exports.create = function() {
10+
return new Set();
11+
};
12+
13+
14+
Set.prototype.add = function(obj) {
15+
L.init(obj);
16+
L.append(this.list, obj);
17+
obj.__setMembership = this;
18+
};
19+
20+
21+
Set.prototype.remove = function(obj) {
22+
L.remove(obj);
23+
obj.__setMembership = null;
24+
};
25+
26+
27+
Set.prototype.contains = function(obj) {
28+
return obj.__setMembership === this;
29+
};

test/simple/test-set.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
var common = require('../common');
2+
var set = require('_set');
3+
var assert = require('assert');
4+
5+
6+
var s = set.create();
7+
8+
var A = { name: "A" };
9+
var B = { name: "B" };
10+
var C = { name: "C" };
11+
var D = { name: "D" };
12+
13+
14+
s.add(A);
15+
16+
assert.ok(s.contains(A));
17+
assert.ok(!s.contains(B));
18+
assert.ok(!s.contains(C));
19+
assert.ok(!s.contains(D));
20+
21+
s.remove(A);
22+
23+
assert.ok(!s.contains(A));
24+
assert.ok(!s.contains(B));
25+
assert.ok(!s.contains(C));
26+
assert.ok(!s.contains(D));
27+
28+
s.add(A);
29+
s.add(B);
30+
31+
32+
assert.ok(s.contains(A));
33+
assert.ok(s.contains(B));
34+
assert.ok(!s.contains(C));
35+
assert.ok(!s.contains(D));

0 commit comments

Comments
 (0)