DATAREDIS-729 - Add support for ZLEXCOUNT.
Original pull request: #569.
This commit is contained in:
@@ -2454,6 +2454,43 @@ public abstract class AbstractConnectionIntegrationTests {
|
||||
assertThat((Set<String>) results.get(13)).contains("c", "b").doesNotContain("a", "d", "e", "f", "g");
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-729
|
||||
@IfProfileValue(name = "redisVersion", value = "2.9.0+")
|
||||
@WithRedisDriver({ RedisDriver.JEDIS, RedisDriver.LETTUCE })
|
||||
public void zLexCountTest() {
|
||||
|
||||
actual.add(connection.zAdd("myzset", 0, "a"));
|
||||
actual.add(connection.zAdd("myzset", 0, "b"));
|
||||
actual.add(connection.zAdd("myzset", 0, "c"));
|
||||
actual.add(connection.zAdd("myzset", 0, "d"));
|
||||
actual.add(connection.zAdd("myzset", 0, "e"));
|
||||
actual.add(connection.zAdd("myzset", 0, "f"));
|
||||
actual.add(connection.zAdd("myzset", 0, "g"));
|
||||
|
||||
actual.add(connection.zLexCount("myzset", Range.unbounded()));
|
||||
actual.add(connection.zLexCount("myzset", Range.range().lt("c")));
|
||||
actual.add(connection.zLexCount("myzset", Range.range().lte("c")));
|
||||
actual.add(connection.zLexCount("myzset", Range.range().gte("aaa").lt("g")));
|
||||
actual.add(connection.zLexCount("myzset", Range.range().gte("e")));
|
||||
|
||||
List<Object> results = getResults();
|
||||
|
||||
Long count = (Long) results.get(7);
|
||||
assertThat(count).isEqualTo(7);
|
||||
|
||||
count = (Long) results.get(8);
|
||||
assertThat(count).isEqualTo(2);
|
||||
|
||||
count = (Long) results.get(9);
|
||||
assertThat(count).isEqualTo(3);
|
||||
|
||||
count = (Long) results.get(10);
|
||||
assertThat(count).isEqualTo(5);
|
||||
|
||||
count = (Long) results.get(11);
|
||||
assertThat(count).isEqualTo(3);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class) // DATAREDIS-316, DATAREDIS-692
|
||||
@WithRedisDriver({ RedisDriver.JEDIS, RedisDriver.LETTUCE })
|
||||
public void setWithExpirationAndNullOpionShouldThrowException() {
|
||||
|
||||
@@ -48,6 +48,7 @@ import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||
*
|
||||
* @author Mark Paluch
|
||||
* @author Christoph Strobl
|
||||
* @author Andrey Shlykov
|
||||
*/
|
||||
@RunWith(Parameterized.class)
|
||||
@SuppressWarnings("unchecked")
|
||||
@@ -693,4 +694,32 @@ public class DefaultReactiveZSetOperationsIntegrationTests<K, V> {
|
||||
.expectNext(0L) //
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-729
|
||||
public void lexCount() {
|
||||
|
||||
assumeTrue(serializer instanceof StringRedisSerializer);
|
||||
|
||||
K key = keyFactory.instance();
|
||||
|
||||
zSetOperations.add(key, (V) "a", 0).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
zSetOperations.add(key, (V) "b", 0).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
zSetOperations.add(key, (V) "c", 0).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
zSetOperations.add(key, (V) "d", 0).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
zSetOperations.add(key, (V) "e", 0).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
zSetOperations.add(key, (V) "f", 0).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
zSetOperations.add(key, (V) "g", 0).as(StepVerifier::create).expectNext(true).verifyComplete();
|
||||
|
||||
zSetOperations.lexCount(key, Range.unbounded()).as(StepVerifier::create)
|
||||
.expectNext(7L)
|
||||
.verifyComplete();
|
||||
|
||||
zSetOperations.lexCount(key, Range.leftOpen("b", "f")).as(StepVerifier::create)
|
||||
.expectNext(4L)
|
||||
.verifyComplete();
|
||||
|
||||
zSetOperations.lexCount(key, Range.rightOpen("b", "f")).as(StepVerifier::create)
|
||||
.expectNext(4L)
|
||||
.verifyComplete();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ import org.springframework.test.annotation.IfProfileValue;
|
||||
* @author Christoph Strobl
|
||||
* @author Mark Paluch
|
||||
* @author Wongoo (望哥)
|
||||
* @author Andrey Shlykov
|
||||
* @param <K> Key type
|
||||
* @param <V> Value type
|
||||
*/
|
||||
@@ -459,4 +460,40 @@ public class DefaultZSetOperationsTests<K, V> {
|
||||
|
||||
assertThat(zSetOps.score(key1, value1)).isCloseTo(6.0, offset(0.1));
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-729
|
||||
public void testLexCountUnbounded() {
|
||||
|
||||
assumeThat(valueFactory).isOfAnyClassIn(DoubleObjectFactory.class, DoubleAsStringObjectFactory.class,
|
||||
LongAsStringObjectFactory.class, LongObjectFactory.class);
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
V value2 = valueFactory.instance();
|
||||
V value3 = valueFactory.instance();
|
||||
|
||||
zSetOps.add(key, value1, 0);
|
||||
zSetOps.add(key, value2, 0);
|
||||
zSetOps.add(key, value3, 0);
|
||||
|
||||
assertThat(zSetOps.lexCount(key, RedisZSetCommands.Range.unbounded())).isEqualTo(3);
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-729
|
||||
public void testLexCountBounded() {
|
||||
|
||||
assumeThat(valueFactory).isOfAnyClassIn(DoubleObjectFactory.class, DoubleAsStringObjectFactory.class,
|
||||
LongAsStringObjectFactory.class, LongObjectFactory.class);
|
||||
|
||||
K key = keyFactory.instance();
|
||||
V value1 = valueFactory.instance();
|
||||
V value2 = valueFactory.instance();
|
||||
V value3 = valueFactory.instance();
|
||||
|
||||
zSetOps.add(key, value1, 0);
|
||||
zSetOps.add(key, value2, 0);
|
||||
zSetOps.add(key, value3, 0);
|
||||
|
||||
assertThat(zSetOps.lexCount(key, RedisZSetCommands.Range.range().gt(value1))).isEqualTo(2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ import org.springframework.test.annotation.IfProfileValue;
|
||||
* @author Jennifer Hickey
|
||||
* @author Thomas Darimont
|
||||
* @author Mark Paluch
|
||||
* @author Andrey Shlykov
|
||||
*/
|
||||
public abstract class AbstractRedisZSetTest<T> extends AbstractRedisCollectionTests<T> {
|
||||
|
||||
@@ -660,4 +661,38 @@ public abstract class AbstractRedisZSetTest<T> extends AbstractRedisCollectionTe
|
||||
cursor.close();
|
||||
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-729
|
||||
public void testLexCountUnbounded() {
|
||||
|
||||
assumeThat(factory).isOfAnyClassIn(DoubleObjectFactory.class, DoubleAsStringObjectFactory.class,
|
||||
LongAsStringObjectFactory.class, LongObjectFactory.class);
|
||||
|
||||
T t1 = getT();
|
||||
T t2 = getT();
|
||||
T t3 = getT();
|
||||
|
||||
zSet.add(t1, 1);
|
||||
zSet.add(t2, 1);
|
||||
zSet.add(t3, 1);
|
||||
|
||||
assertThat(zSet.lexCount(RedisZSetCommands.Range.unbounded())).isEqualTo(Long.valueOf(3));
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-729
|
||||
public void testLexCountBounded() {
|
||||
|
||||
assumeThat(factory).isOfAnyClassIn(DoubleObjectFactory.class, DoubleAsStringObjectFactory.class,
|
||||
LongAsStringObjectFactory.class, LongObjectFactory.class);
|
||||
|
||||
T t1 = getT();
|
||||
T t2 = getT();
|
||||
T t3 = getT();
|
||||
|
||||
zSet.add(t1, 1);
|
||||
zSet.add(t2, 1);
|
||||
zSet.add(t3, 1);
|
||||
|
||||
assertThat(zSet.lexCount(RedisZSetCommands.Range.range().gt(t1))).isEqualTo(Long.valueOf(2));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user