DATAREDIS-729 - Add support for ZLEXCOUNT.

Original pull request: #569.
This commit is contained in:
anshlykov
2020-10-09 17:23:11 +03:00
committed by Mark Paluch
parent 4b33a62f64
commit bd1332ec5c
21 changed files with 448 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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