Add imperative support for ZDIFF, ZDIFFSTORE, ZINTER, and ZUNION commands.

See: #2041 & #2042
Original Pull Request: #2097
This commit is contained in:
Mark Paluch
2021-06-23 17:39:49 +02:00
committed by Christoph Strobl
parent 755c8417a3
commit 1c30d69195
18 changed files with 2409 additions and 361 deletions

View File

@@ -1887,6 +1887,64 @@ public abstract class AbstractConnectionIntegrationTests {
Arrays.asList(new Object[] { true, true, true, 6d, new LinkedHashSet<>(Collections.singletonList("Joe")) }));
}
@Test // GH-2041
@EnabledOnCommand("ZDIFF")
void testZDiff() {
actual.add(connection.zAdd("myset", 2, "Bob"));
actual.add(connection.zAdd("myset", 1, "James"));
actual.add(connection.zAdd("myset", 4, "Joe"));
actual.add(connection.zAdd("otherset", 1, "Bob"));
actual.add(connection.zAdd("otherset", 4, "James"));
actual.add(connection.zDiff("myset", "otherset"));
actual.add(connection.zDiffWithScores("myset", "otherset"));
verifyResults(Arrays.asList(new Object[] { true, true, true, true, true, Collections.singleton("Joe"),
Collections.singleton(new DefaultStringTuple("Joe", 4)) }));
}
@Test // GH-2041
@EnabledOnCommand("ZDIFFSTORE")
void testZDiffStore() {
actual.add(connection.zAdd("myset", 2, "Bob"));
actual.add(connection.zAdd("myset", 1, "James"));
actual.add(connection.zAdd("myset", 4, "Joe"));
actual.add(connection.zAdd("otherset", 1, "Bob"));
actual.add(connection.zAdd("otherset", 4, "James"));
actual.add(connection.zDiffStore("thirdset", "myset", "otherset"));
actual.add(connection.zRange("thirdset", 0, -1));
verifyResults(Arrays.asList(new Object[] { true, true, true, true, true, 1L, Collections.singleton("Joe") }));
}
@Test // GH-2042
@EnabledOnCommand("ZINTER")
void testZInter() {
actual.add(connection.zAdd("myset", 2, "Bob"));
actual.add(connection.zAdd("myset", 1, "James"));
actual.add(connection.zAdd("myset", 4, "Joe"));
actual.add(connection.zAdd("otherset", 1, "Bob"));
actual.add(connection.zAdd("otherset", 4, "James"));
actual.add(connection.zInter("myset", "otherset"));
actual.add(connection.zInterWithScores("myset", "otherset"));
verifyResults(Arrays.asList(new Object[] { true, true, true, true, true,
new LinkedHashSet<>(Arrays.asList("Bob", "James")),
new LinkedHashSet<>(Arrays.asList(new DefaultStringTuple("Bob", 3d), new DefaultStringTuple("James", 5))) }));
}
@Test // GH-2042
@EnabledOnCommand("ZINTER")
void testZInterAggWeights() {
actual.add(connection.zAdd("myset", 2, "Bob"));
actual.add(connection.zAdd("myset", 1, "James"));
actual.add(connection.zAdd("myset", 4, "Joe"));
actual.add(connection.zAdd("otherset", 1, "Bob"));
actual.add(connection.zAdd("otherset", 4, "James"));
actual.add(connection.zInter("myset", "otherset"));
actual.add(connection.zInterWithScores(Aggregate.MAX, new int[] { 2, 3 }, "myset", "otherset"));
verifyResults(Arrays.asList(new Object[] { true, true, true, true, true,
new LinkedHashSet<>(Arrays.asList("Bob", "James")),
new LinkedHashSet<>(Arrays.asList(new DefaultStringTuple("Bob", 4d), new DefaultStringTuple("James", 12d))) }));
}
@Test
void testZInterStore() {
actual.add(connection.zAdd("myset", 2, "Bob"));
@@ -2114,6 +2172,39 @@ public abstract class AbstractConnectionIntegrationTests {
verifyResults(Arrays.asList(new Object[] { true, true, true, Arrays.asList(1d, 3d, null) }));
}
@Test // GH-2042
@EnabledOnCommand("ZUNION")
void testZUnion() {
actual.add(connection.zAdd("myset", 2, "Bob"));
actual.add(connection.zAdd("myset", 1, "James"));
actual.add(connection.zAdd("myset", 4, "Joe"));
actual.add(connection.zAdd("otherset", 1, "Bob"));
actual.add(connection.zAdd("otherset", 4, "James"));
actual.add(connection.zUnion("myset", "otherset"));
actual.add(connection.zUnionWithScores("myset", "otherset"));
verifyResults(Arrays
.asList(new Object[] { true, true, true, true, true, new LinkedHashSet<>(Arrays.asList("Bob", "James", "Joe")),
new LinkedHashSet<>(Arrays.asList(new DefaultStringTuple("Bob", 3d), new DefaultStringTuple("James", 5),
new DefaultStringTuple("Joe", 4))) }));
}
@Test // GH-2042
@EnabledOnCommand("ZUNION")
void testZUnionAggWeights() {
actual.add(connection.zAdd("myset", 2, "Bob"));
actual.add(connection.zAdd("myset", 1, "James"));
actual.add(connection.zAdd("myset", 4, "Joe"));
actual.add(connection.zAdd("otherset", 1, "Bob"));
actual.add(connection.zAdd("otherset", 4, "James"));
actual.add(connection.zUnion("myset", "otherset"));
actual.add(connection.zUnionWithScores(Aggregate.MAX, new int[] { 2, 3 }, "myset", "otherset"));
verifyResults(Arrays
.asList(new Object[] { true, true, true, true, true, new LinkedHashSet<>(Arrays.asList("Bob", "James", "Joe")),
new LinkedHashSet<>(Arrays.asList(new DefaultStringTuple("Bob", 4d), new DefaultStringTuple("Joe", 8d),
new DefaultStringTuple("James", 12d))) }));
}
@Test
void testZUnionStore() {
@@ -2139,9 +2230,8 @@ public abstract class AbstractConnectionIntegrationTests {
actual.add(connection.zUnionStore("thirdset", Aggregate.MAX, new int[] { 2, 3 }, "myset", "otherset"));
actual.add(connection.zRangeWithScores("thirdset", 0, -1));
verifyResults(Arrays.asList(new Object[] { true, true, true, true, true, 3L,
new LinkedHashSet<>(Arrays.asList(new DefaultStringTuple("Bob".getBytes(), "Bob", 4d),
new DefaultStringTuple("Joe".getBytes(), "Joe", 8d),
new DefaultStringTuple("James".getBytes(), "James", 12d))) }));
new LinkedHashSet<>(Arrays.asList(new DefaultStringTuple("Bob", 4d), new DefaultStringTuple("Joe", 8d),
new DefaultStringTuple("James", 12d))) }));
}
// Hash Ops

View File

@@ -604,6 +604,21 @@ public interface ClusterConnectionTests {
// DATAREDIS-315
void zIncrByShouldIncScoreForValueCorrectly();
// GH-2041
void zDiffShouldThrowExceptionWhenKeysDoNotMapToSameSlots();
// GH-2041
void zDiffShouldWorkForSameSlotKeys();
// GH-2041
void zDiffStoreShouldWorkForSameSlotKeys();
// GH-2042
void zInterShouldThrowExceptionWhenKeysDoNotMapToSameSlots();
// GH-2042
void zInterShouldWorkForSameSlotKeys();
// DATAREDIS-315
void zInterStoreShouldThrowExceptionWhenKeysDoNotMapToSameSlots();
@@ -685,6 +700,12 @@ public interface ClusterConnectionTests {
// GH-2038
void zMScoreShouldRetrieveScoreForValues();
// GH-2042
void zUnionShouldThrowExceptionWhenKeysDoNotMapToSameSlots();
// GH-2042
void zUnionShouldWorkForSameSlotKeys();
// DATAREDIS-315
void zUnionStoreShouldThrowExceptionWhenKeysDoNotMapToSameSlots();

View File

@@ -2006,7 +2006,67 @@ public class JedisClusterConnectionTests implements ClusterConnectionTests {
assertThat(nativeConnection.zrank(KEY_1_BYTES, VALUE_1_BYTES)).isEqualTo(1L);
}
@Test // DATAREDIS-315
@Test // GH-2041
public void zDiffShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zDiff(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zDiffStore(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zDiffWithScores(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
}
@Test // GH-2041
@EnabledOnCommand("ZDIFF")
public void zDiffShouldWorkForSameSlotKeys() {
nativeConnection.zadd(SAME_SLOT_KEY_1_BYTES, 10D, VALUE_1_BYTES);
nativeConnection.zadd(SAME_SLOT_KEY_1_BYTES, 20D, VALUE_2_BYTES);
nativeConnection.zadd(SAME_SLOT_KEY_2_BYTES, 20D, VALUE_2_BYTES);
assertThat(clusterConnection.zDiff(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES)).contains(VALUE_1_BYTES);
assertThat(clusterConnection.zDiffWithScores(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES))
.contains(new DefaultTuple(VALUE_1_BYTES, 10D));
}
@Test // GH-2041
@EnabledOnCommand("ZDIFFSTORE")
public void zDiffStoreShouldWorkForSameSlotKeys() {
nativeConnection.zadd(SAME_SLOT_KEY_1_BYTES, 10D, VALUE_1_BYTES);
nativeConnection.zadd(SAME_SLOT_KEY_1_BYTES, 20D, VALUE_2_BYTES);
nativeConnection.zadd(SAME_SLOT_KEY_2_BYTES, 20D, VALUE_2_BYTES);
clusterConnection.zDiffStore(SAME_SLOT_KEY_3_BYTES, SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES);
assertThat(nativeConnection.zrange(SAME_SLOT_KEY_3_BYTES, 0, -1)).contains(VALUE_1_BYTES);
}
@Test // GH-2042
public void zInterShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zInter(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zInterWithScores(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
}
@Test // GH-2042
@EnabledOnCommand("ZINTER")
public void zInterShouldWorkForSameSlotKeys() {
nativeConnection.zadd(SAME_SLOT_KEY_1_BYTES, 10D, VALUE_1_BYTES);
nativeConnection.zadd(SAME_SLOT_KEY_1_BYTES, 20D, VALUE_2_BYTES);
nativeConnection.zadd(SAME_SLOT_KEY_2_BYTES, 20D, VALUE_2_BYTES);
assertThat(clusterConnection.zInter(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES)).contains(VALUE_2_BYTES);
assertThat(clusterConnection.zInterWithScores(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES))
.contains(new DefaultTuple(VALUE_2_BYTES, 40D));
}
@Test // GH-2042
public void zInterStoreShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zInterStore(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
@@ -2364,6 +2424,29 @@ public class JedisClusterConnectionTests implements ClusterConnectionTests {
assertThat(clusterConnection.zMScore(KEY_1_BYTES, VALUE_1_BYTES, VALUE_2_BYTES)).containsSequence(10D, 20D);
}
@Test // GH-2042
public void zUnionShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zUnion(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zUnionWithScores(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
}
@Test // GH-2042
@EnabledOnCommand("ZUNION")
public void zUnionShouldWorkForSameSlotKeys() {
nativeConnection.zadd(SAME_SLOT_KEY_1_BYTES, 10D, VALUE_1_BYTES);
nativeConnection.zadd(SAME_SLOT_KEY_1_BYTES, 30D, VALUE_3_BYTES);
nativeConnection.zadd(SAME_SLOT_KEY_2_BYTES, 20D, VALUE_2_BYTES);
assertThat(clusterConnection.zUnion(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES)).contains(VALUE_1_BYTES,
VALUE_2_BYTES, VALUE_3_BYTES);
assertThat(clusterConnection.zUnionWithScores(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES)).contains(
new DefaultTuple(VALUE_1_BYTES, 10D), new DefaultTuple(VALUE_2_BYTES, 20D),
new DefaultTuple(VALUE_3_BYTES, 30D));
}
@Test // DATAREDIS-315
public void zUnionStoreShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)

View File

@@ -2047,6 +2047,66 @@ public class LettuceClusterConnectionTests implements ClusterConnectionTests {
assertThat(nativeConnection.zrank(KEY_1, VALUE_1)).isEqualTo(1L);
}
@Test // GH-2041
public void zDiffShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zDiff(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zDiffStore(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zDiffWithScores(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
}
@Test // GH-2041
@EnabledOnCommand("ZDIFF")
public void zDiffShouldWorkForSameSlotKeys() {
nativeConnection.zadd(SAME_SLOT_KEY_1, 10D, VALUE_1);
nativeConnection.zadd(SAME_SLOT_KEY_1, 20D, VALUE_2);
nativeConnection.zadd(SAME_SLOT_KEY_2, 20D, VALUE_2);
assertThat(clusterConnection.zDiff(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES)).contains(VALUE_1_BYTES);
assertThat(clusterConnection.zDiffWithScores(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES))
.contains(new DefaultTuple(VALUE_1_BYTES, 10D));
}
@Test // GH-2041
@EnabledOnCommand("ZDIFFSTORE")
public void zDiffStoreShouldWorkForSameSlotKeys() {
nativeConnection.zadd(SAME_SLOT_KEY_1, 10D, VALUE_1);
nativeConnection.zadd(SAME_SLOT_KEY_1, 20D, VALUE_2);
nativeConnection.zadd(SAME_SLOT_KEY_2, 20D, VALUE_2);
clusterConnection.zDiffStore(SAME_SLOT_KEY_3_BYTES, SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES);
assertThat(nativeConnection.zrange(SAME_SLOT_KEY_3, 0, -1)).contains(VALUE_1);
}
@Test // GH-2042
public void zInterShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zInter(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zInterWithScores(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
}
@Test // GH-2042
@EnabledOnCommand("ZINTER")
public void zInterShouldWorkForSameSlotKeys() {
nativeConnection.zadd(SAME_SLOT_KEY_1, 10D, VALUE_1);
nativeConnection.zadd(SAME_SLOT_KEY_1, 20D, VALUE_2);
nativeConnection.zadd(SAME_SLOT_KEY_2, 20D, VALUE_2);
assertThat(clusterConnection.zInter(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES)).contains(VALUE_2_BYTES);
assertThat(clusterConnection.zInterWithScores(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES))
.contains(new DefaultTuple(VALUE_2_BYTES, 40D));
}
@Test // DATAREDIS-315
public void zInterStoreShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)
@@ -2405,6 +2465,29 @@ public class LettuceClusterConnectionTests implements ClusterConnectionTests {
assertThat(clusterConnection.zMScore(KEY_1_BYTES, VALUE_1_BYTES, VALUE_2_BYTES)).containsExactly(10D, 20D);
}
@Test // GH-2042
public void zUnionShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zUnion(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
assertThatExceptionOfType(DataAccessException.class)
.isThrownBy(() -> clusterConnection.zUnionWithScores(KEY_3_BYTES, KEY_1_BYTES, KEY_2_BYTES));
}
@Test // GH-2042
@EnabledOnCommand("ZUNION")
public void zUnionShouldWorkForSameSlotKeys() {
nativeConnection.zadd(SAME_SLOT_KEY_1, 10D, VALUE_1);
nativeConnection.zadd(SAME_SLOT_KEY_1, 30D, VALUE_3);
nativeConnection.zadd(SAME_SLOT_KEY_2, 20D, VALUE_2);
assertThat(clusterConnection.zUnion(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES)).contains(VALUE_1_BYTES,
VALUE_2_BYTES, VALUE_3_BYTES);
assertThat(clusterConnection.zUnionWithScores(SAME_SLOT_KEY_1_BYTES, SAME_SLOT_KEY_2_BYTES)).contains(
new DefaultTuple(VALUE_1_BYTES, 10D), new DefaultTuple(VALUE_2_BYTES, 20D),
new DefaultTuple(VALUE_3_BYTES, 30D));
}
@Test // DATAREDIS-315
public void zUnionStoreShouldThrowExceptionWhenKeysDoNotMapToSameSlots() {
assertThatExceptionOfType(DataAccessException.class)

View File

@@ -462,7 +462,117 @@ public class DefaultZSetOperationsIntegrationTests<K, V> {
assertThat(count).isEqualTo(3);
}
@ParameterizedRedisTest // GH-2042
@EnabledOnCommand("ZDIFF")
void testZsetDiff() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
V value1 = valueFactory.instance();
V value2 = valueFactory.instance();
zSetOps.add(key1, value1, 1.0);
zSetOps.add(key1, value2, 2.0);
zSetOps.add(key2, value2, 3.0);
assertThat(zSetOps.difference(key1, key2)).containsOnly(value1);
assertThat(zSetOps.differenceWithScores(key1, key2)).containsOnly(new DefaultTypedTuple<>(value1, 1d));
}
@ParameterizedRedisTest // DATAREDIS-746, GH-2042
@EnabledOnCommand("ZDIFFSTORE")
void testZsetDiffStore() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
K key3 = keyFactory.instance();
V value1 = valueFactory.instance();
V value2 = valueFactory.instance();
zSetOps.add(key1, value1, 1.0);
zSetOps.add(key1, value2, 2.0);
zSetOps.add(key2, value2, 3.0);
assertThat(zSetOps.differenceAndStore(key1, Collections.singletonList(key2), key3)).isEqualTo(1);
assertThat(zSetOps.rangeWithScores(key3, 0, -1)).containsOnly(new DefaultTypedTuple<>(value1, 1d));
}
@ParameterizedRedisTest // GH-2042
@EnabledOnCommand("ZINTER")
void testZsetIntersect() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
V value1 = valueFactory.instance();
V value2 = valueFactory.instance();
zSetOps.add(key1, value1, 1.0);
zSetOps.add(key1, value2, 2.0);
zSetOps.add(key2, value2, 3.0);
assertThat(zSetOps.intersect(key1, Collections.singletonList(key2))).containsExactly(value2);
}
@ParameterizedRedisTest // DATAREDIS-746, GH-2042
@EnabledOnCommand("ZINTER")
void testZsetIntersectWithAggregate() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
V value1 = valueFactory.instance();
V value2 = valueFactory.instance();
zSetOps.add(key1, value1, 1.0);
zSetOps.add(key1, value2, 2.0);
zSetOps.add(key2, value2, 3.0);
assertThat(zSetOps.intersectWithScores(key1, Collections.singletonList(key2), RedisZSetCommands.Aggregate.MIN))
.contains(new DefaultTypedTuple<>(value2, 2d));
zSetOps.intersectAndStore(key1, Collections.singletonList(key2), key1, RedisZSetCommands.Aggregate.MIN);
assertThat(zSetOps.score(key1, value2)).isCloseTo(2.0, offset(0.1));
}
@ParameterizedRedisTest // DATAREDIS-746
void testZsetIntersectWithAggregateWeights() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
V value1 = valueFactory.instance();
zSetOps.add(key1, value1, 4.0);
zSetOps.add(key2, value1, 3.0);
zSetOps.intersectAndStore(key1, Collections.singletonList(key2), key1, RedisZSetCommands.Aggregate.MAX,
Weights.of(1, 2));
assertThat(zSetOps.score(key1, value1)).isCloseTo(6.0, offset(0.1));
}
@ParameterizedRedisTest // GH-2042
@EnabledOnCommand("ZUNION")
void testZsetUnion() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
V value1 = valueFactory.instance();
V value2 = valueFactory.instance();
zSetOps.add(key1, value1, 1.0);
zSetOps.add(key1, value2, 2.0);
zSetOps.add(key2, value2, 3.0);
assertThat(zSetOps.union(key1, Collections.singletonList(key2))).containsOnly(value1, value2);
}
@ParameterizedRedisTest // DATAREDIS-746, GH-2042
@EnabledOnCommand("ZUNION")
void testZsetUnionWithAggregate() {
K key1 = keyFactory.instance();
@@ -475,6 +585,9 @@ public class DefaultZSetOperationsIntegrationTests<K, V> {
zSetOps.add(key1, value2, 2.0);
zSetOps.add(key2, value2, 3.0);
assertThat(zSetOps.unionWithScores(key1, Collections.singletonList(key2)))
.containsOnly(new DefaultTypedTuple<>(value1, 1d), new DefaultTypedTuple<>(value2, 5d));
zSetOps.unionAndStore(key1, Collections.singletonList(key2), key1, RedisZSetCommands.Aggregate.MIN);
assertThat(zSetOps.score(key1, value2)).isCloseTo(2.0, offset(0.1));
@@ -496,38 +609,4 @@ public class DefaultZSetOperationsIntegrationTests<K, V> {
assertThat(zSetOps.score(key1, value1)).isCloseTo(6.0, offset(0.1));
}
@ParameterizedRedisTest // DATAREDIS-746
void testZsetIntersectWithAggregate() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
V value1 = valueFactory.instance();
V value2 = valueFactory.instance();
zSetOps.add(key1, value1, 1.0);
zSetOps.add(key1, value2, 2.0);
zSetOps.add(key2, value2, 3.0);
zSetOps.intersectAndStore(key1, Collections.singletonList(key2), key1, RedisZSetCommands.Aggregate.MIN);
assertThat(zSetOps.score(key1, value2)).isCloseTo(2.0, offset(0.1));
}
@ParameterizedRedisTest // DATAREDIS-746
void testZsetIntersectWithAggregateWeights() {
K key1 = keyFactory.instance();
K key2 = keyFactory.instance();
V value1 = valueFactory.instance();
zSetOps.add(key1, value1, 4.0);
zSetOps.add(key2, value1, 3.0);
zSetOps.intersectAndStore(key1, Collections.singletonList(key2), key1, RedisZSetCommands.Aggregate.MAX,
Weights.of(1, 2));
assertThat(zSetOps.score(key1, value1)).isCloseTo(6.0, offset(0.1));
}
}