package redis.clients.jedis.tests.commands; import static redis.clients.jedis.ScanParams.SCAN_POINTER_START; import static redis.clients.jedis.ScanParams.SCAN_POINTER_START_BINARY; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import org.junit.Test; import redis.clients.jedis.ScanParams; import redis.clients.jedis.ScanResult; import redis.clients.jedis.Tuple; import redis.clients.jedis.ZParams; import redis.clients.jedis.params.sortedset.ZAddParams; import redis.clients.jedis.params.sortedset.ZIncrByParams; import redis.clients.util.SafeEncoder; public class SortedSetCommandsTest extends JedisCommandTestBase { final byte[] bfoo = { 0x01, 0x02, 0x03, 0x04 }; final byte[] bbar = { 0x05, 0x06, 0x07, 0x08 }; final byte[] bcar = { 0x09, 0x0A, 0x0B, 0x0C }; final byte[] ba = { 0x0A }; final byte[] bb = { 0x0B }; final byte[] bc = { 0x0C }; final byte[] bInclusiveB = { 0x5B, 0x0B }; final byte[] bExclusiveC = { 0x28, 0x0C }; final byte[] bLexMinusInf = { 0x2D }; final byte[] bLexPlusInf = { 0x2B }; final byte[] bbar1 = { 0x05, 0x06, 0x07, 0x08, 0x0A }; final byte[] bbar2 = { 0x05, 0x06, 0x07, 0x08, 0x0B }; final byte[] bbar3 = { 0x05, 0x06, 0x07, 0x08, 0x0C }; final byte[] bbarstar = { 0x05, 0x06, 0x07, 0x08, '*' }; @Test public void zadd() { long status = jedis.zadd("foo", 1d, "a"); assertEquals(1, status); status = jedis.zadd("foo", 10d, "b"); assertEquals(1, status); status = jedis.zadd("foo", 0.1d, "c"); assertEquals(1, status); status = jedis.zadd("foo", 2d, "a"); assertEquals(0, status); // Binary long bstatus = jedis.zadd(bfoo, 1d, ba); assertEquals(1, bstatus); bstatus = jedis.zadd(bfoo, 10d, bb); assertEquals(1, bstatus); bstatus = jedis.zadd(bfoo, 0.1d, bc); assertEquals(1, bstatus); bstatus = jedis.zadd(bfoo, 2d, ba); assertEquals(0, bstatus); } @Test public void zaddWithParams() { jedis.del("foo"); // xx: never add new member long status = jedis.zadd("foo", 1d, "a", ZAddParams.zAddParams().xx()); assertEquals(0L, status); jedis.zadd("foo", 1d, "a"); // nx: never update current member status = jedis.zadd("foo", 2d, "a", ZAddParams.zAddParams().nx()); assertEquals(0L, status); assertEquals(Double.valueOf(1d), jedis.zscore("foo", "a")); Map<String, Double> scoreMembers = new HashMap<String, Double>(); scoreMembers.put("a", 2d); scoreMembers.put("b", 1d); // ch: return count of members not only added, but also updated status = jedis.zadd("foo", scoreMembers, ZAddParams.zAddParams().ch()); assertEquals(2L, status); // binary jedis.del(bfoo); // xx: never add new member status = jedis.zadd(bfoo, 1d, ba, ZAddParams.zAddParams().xx()); assertEquals(0L, status); jedis.zadd(bfoo, 1d, ba); // nx: never update current member status = jedis.zadd(bfoo, 2d, ba, ZAddParams.zAddParams().nx()); assertEquals(0L, status); assertEquals(Double.valueOf(1d), jedis.zscore(bfoo, ba)); Map<byte[], Double> binaryScoreMembers = new HashMap<byte[], Double>(); binaryScoreMembers.put(ba, 2d); binaryScoreMembers.put(bb, 1d); // ch: return count of members not only added, but also updated status = jedis.zadd(bfoo, binaryScoreMembers, ZAddParams.zAddParams().ch()); assertEquals(2L, status); } @Test public void zrange() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); Set<String> expected = new LinkedHashSet<String>(); expected.add("c"); expected.add("a"); Set<String> range = jedis.zrange("foo", 0, 1); assertEquals(expected, range); expected.add("b"); range = jedis.zrange("foo", 0, 100); assertEquals(expected, range); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bc); bexpected.add(ba); Set<byte[]> brange = jedis.zrange(bfoo, 0, 1); assertEquals(bexpected, brange); bexpected.add(bb); brange = jedis.zrange(bfoo, 0, 100); assertEquals(bexpected, brange); } @Test public void zrangeByLex() { jedis.zadd("foo", 1, "aa"); jedis.zadd("foo", 1, "c"); jedis.zadd("foo", 1, "bb"); jedis.zadd("foo", 1, "d"); Set<String> expected = new LinkedHashSet<String>(); expected.add("bb"); expected.add("c"); // exclusive aa ~ inclusive c assertEquals(expected, jedis.zrangeByLex("foo", "(aa", "[c")); expected.clear(); expected.add("bb"); expected.add("c"); // with LIMIT assertEquals(expected, jedis.zrangeByLex("foo", "-", "+", 1, 2)); } @Test public void zrangeByLexBinary() { // binary jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 1, bc); jedis.zadd(bfoo, 1, bb); Set<byte[]> bExpected = new LinkedHashSet<byte[]>(); bExpected.add(bb); assertEquals(bExpected, jedis.zrangeByLex(bfoo, bInclusiveB, bExclusiveC)); bExpected.clear(); bExpected.add(ba); bExpected.add(bb); // with LIMIT assertEquals(bExpected, jedis.zrangeByLex(bfoo, bLexMinusInf, bLexPlusInf, 0, 2)); } @Test public void zrevrangeByLex() { jedis.zadd("foo", 1, "aa"); jedis.zadd("foo", 1, "c"); jedis.zadd("foo", 1, "bb"); jedis.zadd("foo", 1, "d"); Set<String> expected = new LinkedHashSet<String>(); expected.add("c"); expected.add("bb"); // exclusive aa ~ inclusive c assertEquals(expected, jedis.zrevrangeByLex("foo", "[c", "(aa")); expected.clear(); expected.add("c"); expected.add("bb"); // with LIMIT assertEquals(expected, jedis.zrevrangeByLex("foo", "+", "-", 1, 2)); } @Test public void zrevrangeByLexBinary() { // binary jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 1, bc); jedis.zadd(bfoo, 1, bb); Set<byte[]> bExpected = new LinkedHashSet<byte[]>(); bExpected.add(bb); assertEquals(bExpected, jedis.zrevrangeByLex(bfoo, bExclusiveC, bInclusiveB)); bExpected.clear(); bExpected.add(bb); bExpected.add(ba); // with LIMIT assertEquals(bExpected, jedis.zrevrangeByLex(bfoo, bLexPlusInf, bLexMinusInf, 0, 2)); } @Test public void zrevrange() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); Set<String> expected = new LinkedHashSet<String>(); expected.add("b"); expected.add("a"); Set<String> range = jedis.zrevrange("foo", 0, 1); assertEquals(expected, range); expected.add("c"); range = jedis.zrevrange("foo", 0, 100); assertEquals(expected, range); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bb); bexpected.add(ba); Set<byte[]> brange = jedis.zrevrange(bfoo, 0, 1); assertEquals(bexpected, brange); bexpected.add(bc); brange = jedis.zrevrange(bfoo, 0, 100); assertEquals(bexpected, brange); } @Test public void zrem() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 2d, "b"); long status = jedis.zrem("foo", "a"); Set<String> expected = new LinkedHashSet<String>(); expected.add("b"); assertEquals(1, status); assertEquals(expected, jedis.zrange("foo", 0, 100)); status = jedis.zrem("foo", "bar"); assertEquals(0, status); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 2d, bb); long bstatus = jedis.zrem(bfoo, ba); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bb); assertEquals(1, bstatus); assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); bstatus = jedis.zrem(bfoo, bbar); assertEquals(0, bstatus); } @Test public void zincrby() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 2d, "b"); double score = jedis.zincrby("foo", 2d, "a"); Set<String> expected = new LinkedHashSet<String>(); expected.add("a"); expected.add("b"); assertEquals(3d, score, 0); assertEquals(expected, jedis.zrange("foo", 0, 100)); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 2d, bb); double bscore = jedis.zincrby(bfoo, 2d, ba); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bb); bexpected.add(ba); assertEquals(3d, bscore, 0); assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); } @Test public void zincrbyWithParams() { jedis.del("foo"); // xx: never add new member Double score = jedis.zincrby("foo", 2d, "a", ZIncrByParams.zIncrByParams().xx()); assertNull(score); jedis.zadd("foo", 2d, "a"); // nx: never update current member score = jedis.zincrby("foo", 1d, "a", ZIncrByParams.zIncrByParams().nx()); assertNull(score); assertEquals(Double.valueOf(2d), jedis.zscore("foo", "a")); // Binary jedis.del(bfoo); // xx: never add new member score = jedis.zincrby(bfoo, 2d, ba, ZIncrByParams.zIncrByParams().xx()); assertNull(score); jedis.zadd(bfoo, 2d, ba); // nx: never update current member score = jedis.zincrby(bfoo, 1d, ba, ZIncrByParams.zIncrByParams().nx()); assertNull(score); assertEquals(Double.valueOf(2d), jedis.zscore(bfoo, ba)); } @Test public void zrank() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 2d, "b"); long rank = jedis.zrank("foo", "a"); assertEquals(0, rank); rank = jedis.zrank("foo", "b"); assertEquals(1, rank); assertNull(jedis.zrank("car", "b")); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 2d, bb); long brank = jedis.zrank(bfoo, ba); assertEquals(0, brank); brank = jedis.zrank(bfoo, bb); assertEquals(1, brank); assertNull(jedis.zrank(bcar, bb)); } @Test public void zrevrank() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 2d, "b"); long rank = jedis.zrevrank("foo", "a"); assertEquals(1, rank); rank = jedis.zrevrank("foo", "b"); assertEquals(0, rank); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 2d, bb); long brank = jedis.zrevrank(bfoo, ba); assertEquals(1, brank); brank = jedis.zrevrank(bfoo, bb); assertEquals(0, brank); } @Test public void zrangeWithScores() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); Set<Tuple> expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("c", 0.1d)); expected.add(new Tuple("a", 2d)); Set<Tuple> range = jedis.zrangeWithScores("foo", 0, 1); assertEquals(expected, range); expected.add(new Tuple("b", 10d)); range = jedis.zrangeWithScores("foo", 0, 100); assertEquals(expected, range); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Set<Tuple> bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(bc, 0.1d)); bexpected.add(new Tuple(ba, 2d)); Set<Tuple> brange = jedis.zrangeWithScores(bfoo, 0, 1); assertEquals(bexpected, brange); bexpected.add(new Tuple(bb, 10d)); brange = jedis.zrangeWithScores(bfoo, 0, 100); assertEquals(bexpected, brange); } @Test public void zrevrangeWithScores() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); Set<Tuple> expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("b", 10d)); expected.add(new Tuple("a", 2d)); Set<Tuple> range = jedis.zrevrangeWithScores("foo", 0, 1); assertEquals(expected, range); expected.add(new Tuple("c", 0.1d)); range = jedis.zrevrangeWithScores("foo", 0, 100); assertEquals(expected, range); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Set<Tuple> bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(bb, 10d)); bexpected.add(new Tuple(ba, 2d)); Set<Tuple> brange = jedis.zrevrangeWithScores(bfoo, 0, 1); assertEquals(bexpected, brange); bexpected.add(new Tuple(bc, 0.1d)); brange = jedis.zrevrangeWithScores(bfoo, 0, 100); assertEquals(bexpected, brange); } @Test public void zcard() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); long size = jedis.zcard("foo"); assertEquals(3, size); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); long bsize = jedis.zcard(bfoo); assertEquals(3, bsize); } @Test public void zscore() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); Double score = jedis.zscore("foo", "b"); assertEquals((Double) 10d, score); score = jedis.zscore("foo", "c"); assertEquals((Double) 0.1d, score); score = jedis.zscore("foo", "s"); assertNull(score); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Double bscore = jedis.zscore(bfoo, bb); assertEquals((Double) 10d, bscore); bscore = jedis.zscore(bfoo, bc); assertEquals((Double) 0.1d, bscore); bscore = jedis.zscore(bfoo, SafeEncoder.encode("s")); assertNull(bscore); } @Test public void zcount() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); long result = jedis.zcount("foo", 0.01d, 2.1d); assertEquals(2, result); result = jedis.zcount("foo", "(0.01", "+inf"); assertEquals(3, result); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); long bresult = jedis.zcount(bfoo, 0.01d, 2.1d); assertEquals(2, bresult); bresult = jedis.zcount(bfoo, SafeEncoder.encode("(0.01"), SafeEncoder.encode("+inf")); assertEquals(3, bresult); } @Test public void zlexcount() { jedis.zadd("foo", 1, "a"); jedis.zadd("foo", 1, "b"); jedis.zadd("foo", 1, "c"); jedis.zadd("foo", 1, "aa"); long result = jedis.zlexcount("foo", "[aa", "(c"); assertEquals(2, result); result = jedis.zlexcount("foo", "-", "+"); assertEquals(4, result); result = jedis.zlexcount("foo", "-", "(c"); assertEquals(3, result); result = jedis.zlexcount("foo", "[aa", "+"); assertEquals(3, result); } @Test public void zlexcountBinary() { // Binary jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 1, bc); jedis.zadd(bfoo, 1, bb); long result = jedis.zlexcount(bfoo, bInclusiveB, bExclusiveC); assertEquals(1, result); result = jedis.zlexcount(bfoo, bLexMinusInf, bLexPlusInf); assertEquals(3, result); } @Test public void zrangebyscore() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); Set<String> range = jedis.zrangeByScore("foo", 0d, 2d); Set<String> expected = new LinkedHashSet<String>(); expected.add("c"); expected.add("a"); assertEquals(expected, range); range = jedis.zrangeByScore("foo", 0d, 2d, 0, 1); expected = new LinkedHashSet<String>(); expected.add("c"); assertEquals(expected, range); range = jedis.zrangeByScore("foo", 0d, 2d, 1, 1); Set<String> range2 = jedis.zrangeByScore("foo", "-inf", "(2"); assertEquals(expected, range2); expected = new LinkedHashSet<String>(); expected.add("a"); assertEquals(expected, range); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Set<byte[]> brange = jedis.zrangeByScore(bfoo, 0d, 2d); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bc); bexpected.add(ba); assertEquals(bexpected, brange); brange = jedis.zrangeByScore(bfoo, 0d, 2d, 0, 1); bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bc); assertEquals(bexpected, brange); brange = jedis.zrangeByScore(bfoo, 0d, 2d, 1, 1); Set<byte[]> brange2 = jedis.zrangeByScore(bfoo, SafeEncoder.encode("-inf"), SafeEncoder.encode("(2")); assertEquals(bexpected, brange2); bexpected = new LinkedHashSet<byte[]>(); bexpected.add(ba); assertEquals(bexpected, brange); } @Test public void zrevrangebyscore() { jedis.zadd("foo", 1.0d, "a"); jedis.zadd("foo", 2.0d, "b"); jedis.zadd("foo", 3.0d, "c"); jedis.zadd("foo", 4.0d, "d"); jedis.zadd("foo", 5.0d, "e"); Set<String> range = jedis.zrevrangeByScore("foo", 3d, Double.NEGATIVE_INFINITY, 0, 1); Set<String> expected = new LinkedHashSet<String>(); expected.add("c"); assertEquals(expected, range); range = jedis.zrevrangeByScore("foo", 3.5d, Double.NEGATIVE_INFINITY, 0, 2); expected = new LinkedHashSet<String>(); expected.add("c"); expected.add("b"); assertEquals(expected, range); range = jedis.zrevrangeByScore("foo", 3.5d, Double.NEGATIVE_INFINITY, 1, 1); expected = new LinkedHashSet<String>(); expected.add("b"); assertEquals(expected, range); range = jedis.zrevrangeByScore("foo", 4d, 2d); expected = new LinkedHashSet<String>(); expected.add("d"); expected.add("c"); expected.add("b"); assertEquals(expected, range); range = jedis.zrevrangeByScore("foo", "+inf", "(4"); expected = new LinkedHashSet<String>(); expected.add("e"); assertEquals(expected, range); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Set<byte[]> brange = jedis.zrevrangeByScore(bfoo, 2d, 0d); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bc); bexpected.add(ba); assertEquals(bexpected, brange); brange = jedis.zrevrangeByScore(bfoo, 2d, 0d, 0, 1); bexpected = new LinkedHashSet<byte[]>(); bexpected.add(ba); assertEquals(bexpected, brange); Set<byte[]> brange2 = jedis.zrevrangeByScore(bfoo, SafeEncoder.encode("+inf"), SafeEncoder.encode("(2")); bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bb); assertEquals(bexpected, brange2); brange = jedis.zrevrangeByScore(bfoo, 2d, 0d, 1, 1); bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bc); assertEquals(bexpected, brange); } @Test public void zrangebyscoreWithScores() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); Set<Tuple> range = jedis.zrangeByScoreWithScores("foo", 0d, 2d); Set<Tuple> expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("c", 0.1d)); expected.add(new Tuple("a", 2d)); assertEquals(expected, range); range = jedis.zrangeByScoreWithScores("foo", 0d, 2d, 0, 1); expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("c", 0.1d)); assertEquals(expected, range); range = jedis.zrangeByScoreWithScores("foo", 0d, 2d, 1, 1); expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("a", 2d)); assertEquals(expected, range); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Set<Tuple> brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d); Set<Tuple> bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(bc, 0.1d)); bexpected.add(new Tuple(ba, 2d)); assertEquals(bexpected, brange); brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d, 0, 1); bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(bc, 0.1d)); assertEquals(bexpected, brange); brange = jedis.zrangeByScoreWithScores(bfoo, 0d, 2d, 1, 1); bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(ba, 2d)); assertEquals(bexpected, brange); } @Test public void zrevrangebyscoreWithScores() { jedis.zadd("foo", 1.0d, "a"); jedis.zadd("foo", 2.0d, "b"); jedis.zadd("foo", 3.0d, "c"); jedis.zadd("foo", 4.0d, "d"); jedis.zadd("foo", 5.0d, "e"); Set<Tuple> range = jedis.zrevrangeByScoreWithScores("foo", 3d, Double.NEGATIVE_INFINITY, 0, 1); Set<Tuple> expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("c", 3.0d)); assertEquals(expected, range); range = jedis.zrevrangeByScoreWithScores("foo", 3.5d, Double.NEGATIVE_INFINITY, 0, 2); expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("c", 3.0d)); expected.add(new Tuple("b", 2.0d)); assertEquals(expected, range); range = jedis.zrevrangeByScoreWithScores("foo", 3.5d, Double.NEGATIVE_INFINITY, 1, 1); expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("b", 2.0d)); assertEquals(expected, range); range = jedis.zrevrangeByScoreWithScores("foo", 4d, 2d); expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("d", 4.0d)); expected.add(new Tuple("c", 3.0d)); expected.add(new Tuple("b", 2.0d)); assertEquals(expected, range); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); Set<Tuple> brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d); Set<Tuple> bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(bc, 0.1d)); bexpected.add(new Tuple(ba, 2d)); assertEquals(bexpected, brange); brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 0, 1); bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(ba, 2d)); assertEquals(bexpected, brange); brange = jedis.zrevrangeByScoreWithScores(bfoo, 2d, 0d, 1, 1); bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(bc, 0.1d)); assertEquals(bexpected, brange); } @Test public void zremrangeByRank() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); long result = jedis.zremrangeByRank("foo", 0, 0); assertEquals(1, result); Set<String> expected = new LinkedHashSet<String>(); expected.add("a"); expected.add("b"); assertEquals(expected, jedis.zrange("foo", 0, 100)); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); long bresult = jedis.zremrangeByRank(bfoo, 0, 0); assertEquals(1, bresult); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(ba); bexpected.add(bb); assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); } @Test public void zremrangeByScore() { jedis.zadd("foo", 1d, "a"); jedis.zadd("foo", 10d, "b"); jedis.zadd("foo", 0.1d, "c"); jedis.zadd("foo", 2d, "a"); long result = jedis.zremrangeByScore("foo", 0, 2); assertEquals(2, result); Set<String> expected = new LinkedHashSet<String>(); expected.add("b"); assertEquals(expected, jedis.zrange("foo", 0, 100)); // Binary jedis.zadd(bfoo, 1d, ba); jedis.zadd(bfoo, 10d, bb); jedis.zadd(bfoo, 0.1d, bc); jedis.zadd(bfoo, 2d, ba); long bresult = jedis.zremrangeByScore(bfoo, 0, 2); assertEquals(2, bresult); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(bb); assertEquals(bexpected, jedis.zrange(bfoo, 0, 100)); } @Test public void zremrangeByLex() { jedis.zadd("foo", 1, "a"); jedis.zadd("foo", 1, "b"); jedis.zadd("foo", 1, "c"); jedis.zadd("foo", 1, "aa"); long result = jedis.zremrangeByLex("foo", "[aa", "(c"); assertEquals(2, result); Set<String> expected = new LinkedHashSet<String>(); expected.add("a"); expected.add("c"); assertEquals(expected, jedis.zrangeByLex("foo", "-", "+")); } @Test public void zremrangeByLexBinary() { jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 1, bc); jedis.zadd(bfoo, 1, bb); long bresult = jedis.zremrangeByLex(bfoo, bInclusiveB, bExclusiveC); assertEquals(1, bresult); Set<byte[]> bexpected = new LinkedHashSet<byte[]>(); bexpected.add(ba); bexpected.add(bc); assertEquals(bexpected, jedis.zrangeByLex(bfoo, bLexMinusInf, bLexPlusInf)); } @Test public void zunionstore() { jedis.zadd("foo", 1, "a"); jedis.zadd("foo", 2, "b"); jedis.zadd("bar", 2, "a"); jedis.zadd("bar", 2, "b"); long result = jedis.zunionstore("dst", "foo", "bar"); assertEquals(2, result); Set<Tuple> expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("b", new Double(4))); expected.add(new Tuple("a", new Double(3))); assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); // Binary jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 2, bb); jedis.zadd(bbar, 2, ba); jedis.zadd(bbar, 2, bb); long bresult = jedis.zunionstore(SafeEncoder.encode("dst"), bfoo, bbar); assertEquals(2, bresult); Set<Tuple> bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(bb, new Double(4))); bexpected.add(new Tuple(ba, new Double(3))); assertEquals(bexpected, jedis.zrangeWithScores(SafeEncoder.encode("dst"), 0, 100)); } @Test public void zunionstoreParams() { jedis.zadd("foo", 1, "a"); jedis.zadd("foo", 2, "b"); jedis.zadd("bar", 2, "a"); jedis.zadd("bar", 2, "b"); ZParams params = new ZParams(); params.weights(2, 2.5); params.aggregate(ZParams.Aggregate.SUM); long result = jedis.zunionstore("dst", params, "foo", "bar"); assertEquals(2, result); Set<Tuple> expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("b", new Double(9))); expected.add(new Tuple("a", new Double(7))); assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); // Binary jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 2, bb); jedis.zadd(bbar, 2, ba); jedis.zadd(bbar, 2, bb); ZParams bparams = new ZParams(); bparams.weights(2, 2.5); bparams.aggregate(ZParams.Aggregate.SUM); long bresult = jedis.zunionstore(SafeEncoder.encode("dst"), bparams, bfoo, bbar); assertEquals(2, bresult); Set<Tuple> bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(bb, new Double(9))); bexpected.add(new Tuple(ba, new Double(7))); assertEquals(bexpected, jedis.zrangeWithScores(SafeEncoder.encode("dst"), 0, 100)); } @Test public void zinterstore() { jedis.zadd("foo", 1, "a"); jedis.zadd("foo", 2, "b"); jedis.zadd("bar", 2, "a"); long result = jedis.zinterstore("dst", "foo", "bar"); assertEquals(1, result); Set<Tuple> expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("a", new Double(3))); assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); // Binary jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 2, bb); jedis.zadd(bbar, 2, ba); long bresult = jedis.zinterstore(SafeEncoder.encode("dst"), bfoo, bbar); assertEquals(1, bresult); Set<Tuple> bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(ba, new Double(3))); assertEquals(bexpected, jedis.zrangeWithScores(SafeEncoder.encode("dst"), 0, 100)); } @Test public void zintertoreParams() { jedis.zadd("foo", 1, "a"); jedis.zadd("foo", 2, "b"); jedis.zadd("bar", 2, "a"); ZParams params = new ZParams(); params.weights(2, 2.5); params.aggregate(ZParams.Aggregate.SUM); long result = jedis.zinterstore("dst", params, "foo", "bar"); assertEquals(1, result); Set<Tuple> expected = new LinkedHashSet<Tuple>(); expected.add(new Tuple("a", new Double(7))); assertEquals(expected, jedis.zrangeWithScores("dst", 0, 100)); // Binary jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 2, bb); jedis.zadd(bbar, 2, ba); ZParams bparams = new ZParams(); bparams.weights(2, 2.5); bparams.aggregate(ZParams.Aggregate.SUM); long bresult = jedis.zinterstore(SafeEncoder.encode("dst"), bparams, bfoo, bbar); assertEquals(1, bresult); Set<Tuple> bexpected = new LinkedHashSet<Tuple>(); bexpected.add(new Tuple(ba, new Double(7))); assertEquals(bexpected, jedis.zrangeWithScores(SafeEncoder.encode("dst"), 0, 100)); } @Test public void tupleCompare() { Tuple t1 = new Tuple("foo", 1d); Tuple t2 = new Tuple("bar", 2d); assertEquals(-1, t1.compareTo(t2)); assertEquals(1, t2.compareTo(t1)); assertEquals(0, t2.compareTo(t2)); } @Test public void zscan() { jedis.zadd("foo", 1, "a"); jedis.zadd("foo", 2, "b"); ScanResult<Tuple> result = jedis.zscan("foo", SCAN_POINTER_START); assertEquals(SCAN_POINTER_START, result.getCursor()); assertFalse(result.getResult().isEmpty()); // binary jedis.zadd(bfoo, 1, ba); jedis.zadd(bfoo, 1, bb); ScanResult<Tuple> bResult = jedis.zscan(bfoo, SCAN_POINTER_START_BINARY); assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); assertFalse(bResult.getResult().isEmpty()); } @Test public void zscanMatch() { ScanParams params = new ScanParams(); params.match("a*"); jedis.zadd("foo", 2, "b"); jedis.zadd("foo", 1, "a"); jedis.zadd("foo", 11, "aa"); ScanResult<Tuple> result = jedis.zscan("foo", SCAN_POINTER_START, params); assertEquals(SCAN_POINTER_START, result.getCursor()); assertFalse(result.getResult().isEmpty()); // binary params = new ScanParams(); params.match(bbarstar); jedis.zadd(bfoo, 2, bbar1); jedis.zadd(bfoo, 1, bbar2); jedis.zadd(bfoo, 11, bbar3); ScanResult<Tuple> bResult = jedis.zscan(bfoo, SCAN_POINTER_START_BINARY, params); assertArrayEquals(SCAN_POINTER_START_BINARY, bResult.getCursorAsBytes()); assertFalse(bResult.getResult().isEmpty()); } @Test public void zscanCount() { ScanParams params = new ScanParams(); params.count(2); jedis.zadd("foo", 1, "a1"); jedis.zadd("foo", 2, "a2"); jedis.zadd("foo", 3, "a3"); jedis.zadd("foo", 4, "a4"); jedis.zadd("foo", 5, "a5"); ScanResult<Tuple> result = jedis.zscan("foo", SCAN_POINTER_START, params); assertFalse(result.getResult().isEmpty()); // binary params = new ScanParams(); params.count(2); jedis.zadd(bfoo, 2, bbar1); jedis.zadd(bfoo, 1, bbar2); jedis.zadd(bfoo, 11, bbar3); ScanResult<Tuple> bResult = jedis.zscan(bfoo, SCAN_POINTER_START_BINARY, params); assertFalse(bResult.getResult().isEmpty()); } }