Add imperative support for ZDIFF, ZDIFFSTORE, ZINTER, and ZUNION commands.
See: #2041 & #2042 Original Pull Request: #2097
This commit is contained in:
committed by
Christoph Strobl
parent
755c8417a3
commit
1c30d69195
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user