Skip to content

Commit 4735ebd

Browse files
committed
make Left hashCode implementation different from and Right hashCode
1 parent 2506ff0 commit 4735ebd

File tree

5 files changed

+29
-17
lines changed

5 files changed

+29
-17
lines changed

build.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ tasks.withType(GenerateModuleMetadata) {
3434
}
3535

3636
dependencies {
37-
testImplementation('org.junit.jupiter:junit-jupiter:5.7.1')
38-
testImplementation('com.google.guava:guava-testlib:30.1.1-jre')
37+
testImplementation('org.junit.jupiter:junit-jupiter:5.8.2')
3938
}
4039

4140
jar {

src/main/java/io/jbock/util/Left.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package io.jbock.util;
22

3-
import java.util.Objects;
43
import java.util.Optional;
54
import java.util.function.Consumer;
65
import java.util.function.Function;
76

7+
import static java.util.Objects.requireNonNull;
8+
89
/**
910
* Internal implementation of a Left-Either.
1011
*
@@ -16,7 +17,7 @@ final class Left<L, R> extends Either<L, R> {
1617
private final L value;
1718

1819
Left(L value) {
19-
this.value = Objects.requireNonNull(value);
20+
this.value = requireNonNull(value);
2021
}
2122

2223
@Override
@@ -112,6 +113,6 @@ public boolean equals(Object obj) {
112113

113114
@Override
114115
public int hashCode() {
115-
return value.hashCode();
116+
return 31 * value.hashCode();
116117
}
117118
}

src/main/java/io/jbock/util/Right.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.util.function.Consumer;
66
import java.util.function.Function;
77

8+
import static java.util.Objects.requireNonNull;
9+
810
/**
911
* Internal implementation of a Right-Either.
1012
*
@@ -16,7 +18,7 @@ final class Right<L, R> extends Either<L, R> {
1618
private final R value;
1719

1820
Right(R value) {
19-
this.value = Objects.requireNonNull(value);
21+
this.value = requireNonNull(value);
2022
}
2123

2224
@Override
@@ -112,6 +114,6 @@ public boolean equals(Object obj) {
112114

113115
@Override
114116
public int hashCode() {
115-
return value.hashCode();
117+
return Objects.hash(value);
116118
}
117119
}

src/test/java/io/jbock/util/EitherTest.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.jbock.util;
22

3-
import com.google.common.testing.EqualsTester;
43
import org.junit.jupiter.api.Test;
54

65
import java.io.IOException;
@@ -9,22 +8,31 @@
98

109
import static org.junit.jupiter.api.Assertions.assertEquals;
1110
import static org.junit.jupiter.api.Assertions.assertFalse;
11+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
1212
import static org.junit.jupiter.api.Assertions.assertSame;
1313
import static org.junit.jupiter.api.Assertions.assertThrows;
1414
import static org.junit.jupiter.api.Assertions.assertTrue;
1515

1616
class EitherTest {
1717

1818
@Test
19-
void testEquals() {
20-
new EqualsTester()
21-
.addEqualityGroup(Either.right("1"), Either.right("1"))
22-
.addEqualityGroup(Either.right("2"), Either.right("2"))
23-
.testEquals();
24-
new EqualsTester()
25-
.addEqualityGroup(Either.left("1"), Either.left("1"))
26-
.addEqualityGroup(Either.left("2"), Either.left("2"))
27-
.testEquals();
19+
void testEqualsAndHashCode() {
20+
assertEquals(Either.right("1"), Either.right("1"));
21+
assertEquals(Either.right("1").hashCode(), Either.right("1").hashCode());
22+
23+
assertNotEquals(Either.right("1"), Either.right("2"));
24+
assertNotEquals(Either.right("1").hashCode(), Either.right("2").hashCode());
25+
assertNotEquals(Either.<Object, Object>right("1"), Either.right(1));
26+
27+
assertEquals(Either.left("1"), Either.left("1"));
28+
assertEquals(Either.left("1").hashCode(), Either.left("1").hashCode());
29+
30+
assertNotEquals(Either.left("1"), Either.left("2"));
31+
assertNotEquals(Either.left("1").hashCode(), Either.left("2").hashCode());
32+
assertNotEquals(Either.<Object, Object>left("1"), Either.left(1));
33+
34+
assertNotEquals(Either.right("1"), Either.left("1"));
35+
assertNotEquals(Either.right("1").hashCode(), Either.left("1").hashCode());
2836
}
2937

3038
@Test

src/test/java/io/jbock/util/EithersTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ class EithersTest {
1616
void testOptionalList() {
1717
assertEquals(Optional.empty(), optionalList(List.of()));
1818
assertEquals(Optional.of(List.of(1)), optionalList(List.of(1)));
19+
assertEquals(Optional.of(List.of(1, 1)), optionalList(List.of(1, 1)));
1920
}
2021

2122
@Test
2223
void testToOptionalList() {
2324
assertEquals(Optional.empty(), Stream.of().collect(toOptionalList()));
2425
assertEquals(Optional.of(List.of(1)), Stream.of(1).collect(toOptionalList()));
26+
assertEquals(Optional.of(List.of(1, 1)), Stream.of(1, 1).collect(toOptionalList()));
2527
}
2628
}

0 commit comments

Comments
 (0)