Skip to content

Commit 2fd3b46

Browse files
author
Benjamin Coe
committed
ported sdiff, sdiffstore, sinterstore, smembers, smove, spop, sunion, client.monitor
1 parent ce7f21f commit 2fd3b46

File tree

7 files changed

+354
-0
lines changed

7 files changed

+354
-0
lines changed

test/commands/sdiff.spec.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
var assert = require("assert");
2+
var config = require("../lib/config");
3+
var helper = require("../helper");
4+
var redis = config.redis;
5+
6+
describe("The 'sdiff' method", function () {
7+
8+
function allTests(parser, ip) {
9+
var args = config.configureClient(parser, ip);
10+
11+
describe("using " + parser + " and " + ip, function () {
12+
var client;
13+
14+
beforeEach(function (done) {
15+
client = redis.createClient.apply(redis.createClient, args);
16+
client.once("error", done);
17+
client.once("connect", function () {
18+
client.flushdb(done);
19+
});
20+
});
21+
22+
it('returns set difference', function (done) {
23+
client.sadd('foo', 'x', helper.isNumber(1));
24+
client.sadd('foo', 'a', helper.isNumber(1));
25+
client.sadd('foo', 'b', helper.isNumber(1));
26+
client.sadd('foo', 'c', helper.isNumber(1));
27+
28+
client.sadd('bar', 'c', helper.isNumber(1));
29+
30+
client.sadd('baz', 'a', helper.isNumber(1));
31+
client.sadd('baz', 'd', helper.isNumber(1));
32+
33+
client.sdiff('foo', 'bar', 'baz', function (err, values) {
34+
values.sort();
35+
assert.equal(values.length, 2);
36+
assert.equal(values[0], 'b');
37+
assert.equal(values[1], 'x');
38+
return done(err);
39+
});
40+
});
41+
42+
afterEach(function () {
43+
client.end();
44+
});
45+
});
46+
}
47+
48+
['javascript', 'hiredis'].forEach(function (parser) {
49+
allTests(parser, "/tmp/redis.sock");
50+
['IPv4', 'IPv6'].forEach(function (ip) {
51+
allTests(parser, ip);
52+
})
53+
});
54+
});

test/commands/sdiffstore.spec.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
var assert = require("assert");
2+
var config = require("../lib/config");
3+
var helper = require("../helper");
4+
var redis = config.redis;
5+
6+
describe("The 'sdiffstore' method", function () {
7+
8+
function allTests(parser, ip) {
9+
var args = config.configureClient(parser, ip);
10+
11+
describe("using " + parser + " and " + ip, function () {
12+
var client;
13+
14+
beforeEach(function (done) {
15+
client = redis.createClient.apply(redis.createClient, args);
16+
client.once("error", done);
17+
client.once("connect", function () {
18+
client.flushdb(done);
19+
});
20+
});
21+
22+
it('calculates set difference ands stores it in a key', function (done) {
23+
client.sadd('foo', 'x', helper.isNumber(1));
24+
client.sadd('foo', 'a', helper.isNumber(1));
25+
client.sadd('foo', 'b', helper.isNumber(1));
26+
client.sadd('foo', 'c', helper.isNumber(1));
27+
28+
client.sadd('bar', 'c', helper.isNumber(1));
29+
30+
client.sadd('baz', 'a', helper.isNumber(1));
31+
client.sadd('baz', 'd', helper.isNumber(1));
32+
33+
client.sdiffstore('quux', 'foo', 'bar', 'baz', helper.isNumber(2));
34+
35+
client.smembers('quux', function (err, values) {
36+
var members = values.sort();
37+
assert.deepEqual(members, [ 'b', 'x' ]);
38+
return done(err);
39+
});
40+
});
41+
42+
afterEach(function () {
43+
client.end();
44+
});
45+
});
46+
}
47+
48+
['javascript', 'hiredis'].forEach(function (parser) {
49+
allTests(parser, "/tmp/redis.sock");
50+
['IPv4', 'IPv6'].forEach(function (ip) {
51+
allTests(parser, ip);
52+
})
53+
});
54+
});

test/commands/sinterstore.spec.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
var assert = require("assert");
2+
var config = require("../lib/config");
3+
var helper = require("../helper");
4+
var redis = config.redis;
5+
6+
describe("The 'sinterstore' method", function () {
7+
8+
function allTests(parser, ip) {
9+
var args = config.configureClient(parser, ip);
10+
11+
describe("using " + parser + " and " + ip, function () {
12+
var client;
13+
14+
beforeEach(function (done) {
15+
client = redis.createClient.apply(redis.createClient, args);
16+
client.once("error", done);
17+
client.once("connect", function () {
18+
client.flushdb(done);
19+
});
20+
});
21+
22+
it('calculates set intersection and stores it in a key', function (done) {
23+
client.sadd('sa', 'a', helper.isNumber(1));
24+
client.sadd('sa', 'b', helper.isNumber(1));
25+
client.sadd('sa', 'c', helper.isNumber(1));
26+
27+
client.sadd('sb', 'b', helper.isNumber(1));
28+
client.sadd('sb', 'c', helper.isNumber(1));
29+
client.sadd('sb', 'd', helper.isNumber(1));
30+
31+
client.sadd('sc', 'c', helper.isNumber(1));
32+
client.sadd('sc', 'd', helper.isNumber(1));
33+
client.sadd('sc', 'e', helper.isNumber(1));
34+
35+
client.sinterstore('foo', 'sa', 'sb', 'sc', helper.isNumber(1));
36+
37+
client.smembers('foo', function (err, members) {
38+
assert.deepEqual(members, [ 'c' ]);
39+
return done(err);
40+
});
41+
});
42+
43+
afterEach(function () {
44+
client.end();
45+
});
46+
});
47+
}
48+
49+
['javascript', 'hiredis'].forEach(function (parser) {
50+
allTests(parser, "/tmp/redis.sock");
51+
['IPv4', 'IPv6'].forEach(function (ip) {
52+
allTests(parser, ip);
53+
})
54+
});
55+
});

test/commands/smembers.spec.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
var assert = require("assert");
2+
var config = require("../lib/config");
3+
var helper = require("../helper");
4+
var redis = config.redis;
5+
6+
describe("The 'smembers' method", function () {
7+
8+
function allTests(parser, ip) {
9+
var args = config.configureClient(parser, ip);
10+
11+
describe("using " + parser + " and " + ip, function () {
12+
var client;
13+
14+
beforeEach(function (done) {
15+
client = redis.createClient.apply(redis.createClient, args);
16+
client.once("error", done);
17+
client.once("connect", function () {
18+
client.flushdb(done);
19+
});
20+
});
21+
22+
it('returns all values in a set', function (done) {
23+
client.sadd('foo', 'x', helper.isNumber(1));
24+
client.sadd('foo', 'y', helper.isNumber(1));
25+
client.smembers('foo', function (err, values) {
26+
assert.equal(values.length, 2);
27+
var members = values.sort();
28+
assert.deepEqual(members, [ 'x', 'y' ]);
29+
return done(err);
30+
});
31+
});
32+
33+
afterEach(function () {
34+
client.end();
35+
});
36+
});
37+
}
38+
39+
['javascript', 'hiredis'].forEach(function (parser) {
40+
allTests(parser, "/tmp/redis.sock");
41+
['IPv4', 'IPv6'].forEach(function (ip) {
42+
allTests(parser, ip);
43+
})
44+
});
45+
});

test/commands/smove.spec.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
var assert = require("assert");
2+
var config = require("../lib/config");
3+
var helper = require("../helper");
4+
var redis = config.redis;
5+
6+
describe("The 'smove' method", function () {
7+
8+
function allTests(parser, ip) {
9+
var args = config.configureClient(parser, ip);
10+
11+
describe("using " + parser + " and " + ip, function () {
12+
var client;
13+
14+
beforeEach(function (done) {
15+
client = redis.createClient.apply(redis.createClient, args);
16+
client.once("error", done);
17+
client.once("connect", function () {
18+
client.flushdb(done);
19+
});
20+
});
21+
22+
it('moves a value to a set that does not yet exist', function (done) {
23+
client.sadd('foo', 'x', helper.isNumber(1));
24+
client.smove('foo', 'bar', 'x', helper.isNumber(1));
25+
client.sismember('foo', 'x', helper.isNumber(0));
26+
client.sismember('bar', 'x', helper.isNumber(1, done));
27+
});
28+
29+
it("does not move a value if it does not exist in the first set", function (done) {
30+
client.sadd('foo', 'x', helper.isNumber(1));
31+
client.smove('foo', 'bar', 'y', helper.isNumber(0));
32+
client.sismember('foo', 'y', helper.isNumber(0));
33+
client.sismember('bar', 'y', helper.isNumber(0, done));
34+
});
35+
36+
afterEach(function () {
37+
client.end();
38+
});
39+
});
40+
}
41+
42+
['javascript', 'hiredis'].forEach(function (parser) {
43+
allTests(parser, "/tmp/redis.sock");
44+
['IPv4', 'IPv6'].forEach(function (ip) {
45+
allTests(parser, ip);
46+
})
47+
});
48+
});

test/commands/spop.spec.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
var assert = require("assert");
2+
var config = require("../lib/config");
3+
var helper = require("../helper");
4+
var redis = config.redis;
5+
6+
describe("The 'spop' method", function () {
7+
8+
function allTests(parser, ip) {
9+
var args = config.configureClient(parser, ip);
10+
11+
describe("using " + parser + " and " + ip, function () {
12+
var client;
13+
14+
beforeEach(function (done) {
15+
client = redis.createClient.apply(redis.createClient, args);
16+
client.once("error", done);
17+
client.once("connect", function () {
18+
client.flushdb(done);
19+
});
20+
});
21+
22+
it('returns a random element from the set', function (done) {
23+
client.sadd('zzz', 'member0', helper.isNumber(1));
24+
client.scard('zzz', helper.isNumber(1));
25+
26+
client.spop('zzz', function (err, value) {
27+
if (err) return done(err);
28+
assert.equal(value, 'member0');
29+
client.scard('zzz', helper.isNumber(0, done));
30+
});
31+
});
32+
33+
afterEach(function () {
34+
client.end();
35+
});
36+
});
37+
}
38+
39+
['javascript', 'hiredis'].forEach(function (parser) {
40+
allTests(parser, "/tmp/redis.sock");
41+
['IPv4', 'IPv6'].forEach(function (ip) {
42+
allTests(parser, ip);
43+
})
44+
});
45+
});

test/commands/sunion.spec.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
var assert = require("assert");
2+
var config = require("../lib/config");
3+
var helper = require("../helper");
4+
var redis = config.redis;
5+
6+
describe("The 'sunion' method", function () {
7+
8+
function allTests(parser, ip) {
9+
var args = config.configureClient(parser, ip);
10+
11+
describe("using " + parser + " and " + ip, function () {
12+
var client;
13+
14+
beforeEach(function (done) {
15+
client = redis.createClient.apply(redis.createClient, args);
16+
client.once("error", done);
17+
client.once("connect", function () {
18+
client.flushdb(done);
19+
});
20+
});
21+
22+
it('returns the union of a group of sets', function (done) {
23+
client.sadd('sa', 'a', helper.isNumber(1));
24+
client.sadd('sa', 'b', helper.isNumber(1));
25+
client.sadd('sa', 'c', helper.isNumber(1));
26+
27+
client.sadd('sb', 'b', helper.isNumber(1));
28+
client.sadd('sb', 'c', helper.isNumber(1));
29+
client.sadd('sb', 'd', helper.isNumber(1));
30+
31+
client.sadd('sc', 'c', helper.isNumber(1));
32+
client.sadd('sc', 'd', helper.isNumber(1));
33+
client.sadd('sc', 'e', helper.isNumber(1));
34+
35+
client.sunion('sa', 'sb', 'sc', function (err, union) {
36+
assert.deepEqual(union.sort(), ['a', 'b', 'c', 'd', 'e']);
37+
return done(err);
38+
});
39+
});
40+
41+
afterEach(function () {
42+
client.end();
43+
});
44+
});
45+
}
46+
47+
['javascript', 'hiredis'].forEach(function (parser) {
48+
allTests(parser, "/tmp/redis.sock");
49+
['IPv4', 'IPv6'].forEach(function (ip) {
50+
allTests(parser, ip);
51+
})
52+
});
53+
});

0 commit comments

Comments
 (0)