Skip to content

Commit f0791a8

Browse files
committed
Add draft version of CustomHashCode classes/tests
1 parent fc94e81 commit f0791a8

File tree

4 files changed

+198
-0
lines changed

4 files changed

+198
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package by.andd3dfx.common.hashcode;
2+
3+
import lombok.Builder;
4+
import lombok.Data;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
8+
import java.util.List;
9+
import java.util.Objects;
10+
11+
@Builder
12+
@Getter
13+
@Setter
14+
public class CustomHashCode {
15+
16+
private int intPrimitive;
17+
private Integer intObject;
18+
private String string;
19+
private Field customObject;
20+
private List<Integer> integersList;
21+
private List<Field> objectsList;
22+
23+
@Data
24+
public class Field {
25+
private int value;
26+
}
27+
28+
@Override
29+
public boolean equals(Object o) {
30+
if (this == o) return true;
31+
if (o == null || getClass() != o.getClass()) return false;
32+
33+
CustomHashCode hashCode = (CustomHashCode) o;
34+
return intPrimitive == hashCode.intPrimitive
35+
&& Objects.equals(intObject, hashCode.intObject)
36+
&& Objects.equals(string, hashCode.string)
37+
&& Objects.equals(customObject, hashCode.customObject)
38+
&& Objects.equals(integersList, hashCode.integersList)
39+
&& Objects.equals(objectsList, hashCode.objectsList);
40+
}
41+
42+
@Override
43+
public int hashCode() {
44+
int result = intPrimitive;
45+
result = 31 * result + (intObject != null ? intObject.hashCode() : 0);
46+
result = 31 * result + (string != null ? string.hashCode() : 0);
47+
result = 31 * result + (customObject != null ? customObject.hashCode() : 0);
48+
result = 31 * result + (integersList != null ? integersList.hashCode() : 0);
49+
result = 31 * result + (objectsList != null ? objectsList.hashCode() : 0);
50+
return result;
51+
}
52+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package by.andd3dfx.common.hashcode;
2+
3+
import lombok.Builder;
4+
import lombok.Data;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
8+
import java.util.List;
9+
import java.util.Objects;
10+
11+
@Builder
12+
@Getter
13+
@Setter
14+
public class CustomHashCode2 {
15+
16+
private int intPrimitive;
17+
private Integer intObject;
18+
private String string;
19+
private Field customObject;
20+
private List<Integer> integersList;
21+
private List<Field> objectsList;
22+
23+
@Data
24+
public class Field {
25+
private int value;
26+
}
27+
28+
@Override
29+
public boolean equals(Object o) {
30+
if (this == o) return true;
31+
if (o == null || getClass() != o.getClass()) return false;
32+
33+
CustomHashCode2 hashCode2 = (CustomHashCode2) o;
34+
return intPrimitive == hashCode2.intPrimitive
35+
&& Objects.equals(intObject, hashCode2.intObject)
36+
&& Objects.equals(string, hashCode2.string)
37+
&& Objects.equals(customObject, hashCode2.customObject)
38+
&& Objects.equals(integersList, hashCode2.integersList)
39+
&& Objects.equals(objectsList, hashCode2.objectsList);
40+
}
41+
42+
@Override
43+
public int hashCode() {
44+
return Objects.hash(intPrimitive, intObject, string, customObject, integersList, objectsList);
45+
}
46+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package by.andd3dfx.common.hashcode;
2+
3+
import org.junit.Test;
4+
5+
import java.util.List;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
public class CustomHashCode2Test {
10+
11+
private final CustomHashCode2 OBJ1 = CustomHashCode2.builder()
12+
.intPrimitive(12)
13+
.integersList(List.of(1, 2))
14+
.build();
15+
private final CustomHashCode2 OBJ2 = CustomHashCode2.builder()
16+
.intPrimitive(13)
17+
.integersList(List.of(2, 3))
18+
.build();
19+
private final CustomHashCode2 OBJ3 = CustomHashCode2.builder()
20+
.intPrimitive(12)
21+
.integersList(List.of(1, 2))
22+
.build();
23+
24+
@Test
25+
public void testHashCode() {
26+
assertThat(OBJ1.hashCode()).isNotEqualTo(OBJ2.hashCode());
27+
assertThat(OBJ1.hashCode()).isEqualTo(OBJ3.hashCode());
28+
}
29+
30+
@Test
31+
public void testEquals() {
32+
// Object equals to itself
33+
assertThat(OBJ1.equals(OBJ1)).isTrue();
34+
assertThat(OBJ2.equals(OBJ2)).isTrue();
35+
assertThat(OBJ3.equals(OBJ3)).isTrue();
36+
37+
// Different objects, different classes
38+
assertThat(OBJ1.equals("OBJ1")).isFalse();
39+
assertThat(OBJ2.equals("OBJ2")).isFalse();
40+
assertThat(OBJ3.equals("OBJ3")).isFalse();
41+
42+
// Different objects, same class
43+
assertThat(OBJ1.equals(OBJ2)).isFalse();
44+
assertThat(OBJ2.equals(OBJ1)).isFalse();
45+
46+
// Equal objects
47+
assertThat(OBJ1.equals(OBJ3)).isTrue();
48+
assertThat(OBJ3.equals(OBJ1)).isTrue();
49+
}
50+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package by.andd3dfx.common.hashcode;
2+
3+
import org.junit.Test;
4+
5+
import java.util.List;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
public class CustomHashCodeTest {
10+
11+
private final CustomHashCode OBJ1 = CustomHashCode.builder()
12+
.intPrimitive(12)
13+
.integersList(List.of(1, 2))
14+
.build();
15+
private final CustomHashCode OBJ2 = CustomHashCode.builder()
16+
.intPrimitive(13)
17+
.integersList(List.of(2, 3))
18+
.build();
19+
private final CustomHashCode OBJ3 = CustomHashCode.builder()
20+
.intPrimitive(12)
21+
.integersList(List.of(1, 2))
22+
.build();
23+
24+
@Test
25+
public void testHashCode() {
26+
assertThat(OBJ1.hashCode()).isNotEqualTo(OBJ2.hashCode());
27+
assertThat(OBJ1.hashCode()).isEqualTo(OBJ3.hashCode());
28+
}
29+
30+
@Test
31+
public void testEquals() {
32+
// Object equals to itself
33+
assertThat(OBJ1.equals(OBJ1)).isTrue();
34+
assertThat(OBJ2.equals(OBJ2)).isTrue();
35+
assertThat(OBJ3.equals(OBJ3)).isTrue();
36+
37+
// Different objects, different classes
38+
assertThat(OBJ1.equals("OBJ1")).isFalse();
39+
assertThat(OBJ2.equals("OBJ2")).isFalse();
40+
assertThat(OBJ3.equals("OBJ3")).isFalse();
41+
42+
// Different objects, same class
43+
assertThat(OBJ1.equals(OBJ2)).isFalse();
44+
assertThat(OBJ2.equals(OBJ1)).isFalse();
45+
46+
// Equal objects
47+
assertThat(OBJ1.equals(OBJ3)).isTrue();
48+
assertThat(OBJ3.equals(OBJ1)).isTrue();
49+
}
50+
}

0 commit comments

Comments
 (0)