From a74f047655c7a6e9a97b526e1f226bacc98d2a64 Mon Sep 17 00:00:00 2001 From: Riccardo Azzolini Date: Fri, 25 Oct 2019 22:48:49 +0200 Subject: [PATCH] Fix/improve hashCode for Functions Some types of Function had hashCode methods which didn't match the behavior of equals, while others could simply be rewritten in a simpler way by using Objects.hash. --- .../main/java/it/cavallium/warppi/math/FunctionDynamic.java | 4 ++-- .../main/java/it/cavallium/warppi/math/FunctionOperator.java | 4 +++- .../main/java/it/cavallium/warppi/math/FunctionSingle.java | 4 +++- .../java/it/cavallium/warppi/math/functions/Variable.java | 4 +++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/it/cavallium/warppi/math/FunctionDynamic.java b/core/src/main/java/it/cavallium/warppi/math/FunctionDynamic.java index 883a6327..7d5e3637 100644 --- a/core/src/main/java/it/cavallium/warppi/math/FunctionDynamic.java +++ b/core/src/main/java/it/cavallium/warppi/math/FunctionDynamic.java @@ -133,10 +133,10 @@ public abstract class FunctionDynamic implements Function { @Override public abstract FunctionDynamic clone(); - + @Override public int hashCode() { - return functions.hashCode() + 883 * super.hashCode(); + return Arrays.hashCode(functions); } @Override diff --git a/core/src/main/java/it/cavallium/warppi/math/FunctionOperator.java b/core/src/main/java/it/cavallium/warppi/math/FunctionOperator.java index c43de8b2..10a52941 100644 --- a/core/src/main/java/it/cavallium/warppi/math/FunctionOperator.java +++ b/core/src/main/java/it/cavallium/warppi/math/FunctionOperator.java @@ -6,6 +6,8 @@ import it.cavallium.warppi.util.Errors; import it.cavallium.warppi.util.Utils; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import java.util.Objects; + public abstract class FunctionOperator implements Function { /** @@ -175,7 +177,7 @@ public abstract class FunctionOperator implements Function { @Override public int hashCode() { - return parameter1.hashCode() + 7 * parameter2.hashCode() + 883 * super.hashCode(); + return Objects.hash(parameter1, parameter2); } @Override diff --git a/core/src/main/java/it/cavallium/warppi/math/FunctionSingle.java b/core/src/main/java/it/cavallium/warppi/math/FunctionSingle.java index 9f17d25f..be61d9f6 100644 --- a/core/src/main/java/it/cavallium/warppi/math/FunctionSingle.java +++ b/core/src/main/java/it/cavallium/warppi/math/FunctionSingle.java @@ -4,6 +4,8 @@ import it.cavallium.warppi.math.rules.Rule; import it.cavallium.warppi.util.Error; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import java.util.Objects; + public abstract class FunctionSingle implements Function { private boolean simplified; @@ -117,7 +119,7 @@ public abstract class FunctionSingle implements Function { @Override public int hashCode() { - return parameter.hashCode() + 883 * super.hashCode(); + return Objects.hash(parameter); } @Override diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/Variable.java b/core/src/main/java/it/cavallium/warppi/math/functions/Variable.java index 32fde17c..8ff7da53 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/Variable.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/Variable.java @@ -8,6 +8,8 @@ import it.cavallium.warppi.math.rules.Rule; import it.cavallium.warppi.util.Error; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import java.util.Objects; + public class Variable implements Function { protected char var; @@ -84,7 +86,7 @@ public class Variable implements Function { @Override public int hashCode() { - return toString().hashCode(); + return Objects.hash(var, type); } @Override