From c92e507596e7f1cb75fe3ca800b9745b96a293ed Mon Sep 17 00:00:00 2001 From: Dongliang Xie Date: Mon, 29 Jun 2026 23:06:42 +0800 Subject: [PATCH] Fix Copy equality/hashCode contract --- pom.xml | 4 ++-- src/main/java/io/zold/api/Copies.java | 2 +- src/test/java/io/zold/api/CopiesTest.java | 17 +++++++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 8f75e51..a94e64a 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ 4.0.0 diff --git a/src/main/java/io/zold/api/Copies.java b/src/main/java/io/zold/api/Copies.java index c0a13b2..a7da2d7 100644 --- a/src/main/java/io/zold/api/Copies.java +++ b/src/main/java/io/zold/api/Copies.java @@ -116,7 +116,7 @@ public int compareTo(final Copy other) { @Override public boolean equals(final Object obj) { return obj instanceof Copy - && this.compareTo((Copy) obj) == 0; + && this.wlt.equals(((Copy) obj).wlt); } @Override diff --git a/src/test/java/io/zold/api/CopiesTest.java b/src/test/java/io/zold/api/CopiesTest.java index a880fa1..5b3f6dc 100644 --- a/src/test/java/io/zold/api/CopiesTest.java +++ b/src/test/java/io/zold/api/CopiesTest.java @@ -41,6 +41,23 @@ void groupsRemotesScoresIntoSingleCopy() { ); } + @Test + void distinguishesCopiesWithDifferentWallets() { + final Remote remote = new Remote.Fake( + new RtScore(new IterableOf<>(new TextOf("a"))) + ); + MatcherAssert.assertThat( + "wallet identity defines copy equality", + new Copies.Copy(new Wallet.Fake(1L), remote).equals( + new Copies.Copy( + new Wallet.Fake(2L), + remote + ) + ), + new IsEqual<>(false) + ); + } + private static Iterable copies() { return new Copies( 1L,