diff --git a/src/main/java/org/springframework/data/redis/core/DefaultTypedTuple.java b/src/main/java/org/springframework/data/redis/core/DefaultTypedTuple.java index ce1690eca..2f61c9055 100644 --- a/src/main/java/org/springframework/data/redis/core/DefaultTypedTuple.java +++ b/src/main/java/org/springframework/data/redis/core/DefaultTypedTuple.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 the original author or authors. + * Copyright 2011-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -63,7 +63,7 @@ public class DefaultTypedTuple implements TypedTuple { return false; if (!(obj instanceof DefaultTypedTuple)) return false; - DefaultTypedTuple other = (DefaultTypedTuple) obj; + DefaultTypedTuple other = (DefaultTypedTuple) obj; if (score == null) { if (other.score != null) return false; @@ -83,8 +83,20 @@ public class DefaultTypedTuple implements TypedTuple { } public int compareTo(Double o) { - Double d = (score == null ? Double.valueOf(0) : score); - Double a = (o == null ? Double.valueOf(0) : o); - return d.compareTo(a); + + double thisScore = (score == null ? 0.0 : score); + double otherScore = (o == null ? 0.0 : o); + + return Double.compare(thisScore, otherScore); + } + + @Override + public int compareTo(TypedTuple o) { + + if (o == null) { + return compareTo(Double.valueOf(0)); + } + + return compareTo(o.getScore()); } } diff --git a/src/main/java/org/springframework/data/redis/core/ZSetOperations.java b/src/main/java/org/springframework/data/redis/core/ZSetOperations.java index 7db1ae9de..66d9d7f18 100644 --- a/src/main/java/org/springframework/data/redis/core/ZSetOperations.java +++ b/src/main/java/org/springframework/data/redis/core/ZSetOperations.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 the original author or authors. + * Copyright 2011-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,13 +23,14 @@ import java.util.Set; * Redis ZSet/sorted set specific operations. * * @author Costin Leau + * @author Christoph Strobl */ public interface ZSetOperations { /** * Typed ZSet tuple. */ - public interface TypedTuple extends Comparable { + public interface TypedTuple extends Comparable> { V getValue(); Double getScore(); diff --git a/src/test/java/org/springframework/data/redis/core/DefaultTypedTupleUnitTests.java b/src/test/java/org/springframework/data/redis/core/DefaultTypedTupleUnitTests.java new file mode 100644 index 000000000..1421645e0 --- /dev/null +++ b/src/test/java/org/springframework/data/redis/core/DefaultTypedTupleUnitTests.java @@ -0,0 +1,64 @@ +/* + * Copyright 2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.redis.core; + +import static org.hamcrest.core.IsEqual.*; +import static org.junit.Assert.*; + +import org.junit.Test; +import org.springframework.data.redis.core.ZSetOperations.TypedTuple; + +/** + * @author Christoph Strobl + */ +public class DefaultTypedTupleUnitTests { + + private static final TypedTuple WITH_SCORE_1 = new DefaultTypedTuple("foo", 1D); + private static final TypedTuple ANOTHER_ONE_WITH_SCORE_1 = new DefaultTypedTuple("another", 1D); + private static final TypedTuple WITH_SCORE_2 = new DefaultTypedTuple("bar", 2D); + private static final TypedTuple WITH_SCORE_NULL = new DefaultTypedTuple("foo", null); + + /** + * @see DATAREDIS-294 + */ + @Test + public void compareToShouldUseScore() { + + assertThat(WITH_SCORE_1.compareTo(WITH_SCORE_2), equalTo(-1)); + assertThat(WITH_SCORE_2.compareTo(WITH_SCORE_1), equalTo(1)); + assertThat(WITH_SCORE_1.compareTo(ANOTHER_ONE_WITH_SCORE_1), equalTo(0)); + } + + /** + * @see DATAREDIS-294 + */ + @Test + public void compareToShouldConsiderGivenNullAsZeroScore() { + + assertThat(WITH_SCORE_1.compareTo(null), equalTo(1)); + assertThat(WITH_SCORE_NULL.compareTo(null), equalTo(0)); + } + + /** + * @see DATAREDIS-294 + */ + @Test + public void compareToShouldConsiderNullScoreAsZeroScore() { + + assertThat(WITH_SCORE_1.compareTo(WITH_SCORE_NULL), equalTo(1)); + assertThat(WITH_SCORE_NULL.compareTo(WITH_SCORE_1), equalTo(-1)); + } +}