From 0c316226e6f59224584d61a129c5be980c985eee Mon Sep 17 00:00:00 2001 From: Riccardo Azzolini Date: Fri, 25 Oct 2019 22:30:10 +0200 Subject: [PATCH] Make Function.equals test for exact equality instead of equivalence Actually, testing for equivalence was only partially implemented (by considering the commutative property for some FunctionOperators). Additionally, should it be needed in the future, equivalence testing would probably be better implemented as a separate, specialized method anyway. --- .../it/cavallium/warppi/math/Function.java | 10 ++++++++ .../warppi/math/FunctionDynamic.java | 4 +--- .../warppi/math/functions/Multiplication.java | 8 ++----- .../warppi/math/functions/RootSquare.java | 2 +- .../cavallium/warppi/math/functions/Sum.java | 6 +---- .../warppi/math/functions/Undefined.java | 2 +- .../math/functions/equations/Equation.java | 8 ++----- .../functions/equations/EquationsSystem.java | 23 +++++++++++-------- .../functions/trigonometry/ArcCosine.java | 4 +--- .../math/functions/trigonometry/ArcSine.java | 4 +--- .../functions/trigonometry/ArcTangent.java | 4 +--- .../math/functions/trigonometry/Cosine.java | 4 +--- .../math/functions/trigonometry/Sine.java | 4 +--- .../math/functions/trigonometry/Tangent.java | 4 +--- 14 files changed, 37 insertions(+), 50 deletions(-) diff --git a/core/src/main/java/it/cavallium/warppi/math/Function.java b/core/src/main/java/it/cavallium/warppi/math/Function.java index 2f6cbb21..31fff2c9 100644 --- a/core/src/main/java/it/cavallium/warppi/math/Function.java +++ b/core/src/main/java/it/cavallium/warppi/math/Function.java @@ -21,6 +21,16 @@ public interface Function { @Override String toString(); + /** + * Indicates whether some other object is a Function which is identical to this one. + *

+ * Two functions which are not identical, but only equivalent (due to, for example, the commutative property) aren't + * considered equal. + * + * @param o the other object to compare. + * @return true if the other object is identical to this Function, false + * otherwise. + */ @Override boolean equals(Object o); 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 5c959bc0..883a6327 100644 --- a/core/src/main/java/it/cavallium/warppi/math/FunctionDynamic.java +++ b/core/src/main/java/it/cavallium/warppi/math/FunctionDynamic.java @@ -140,7 +140,5 @@ public abstract class FunctionDynamic implements Function { } @Override - public boolean equals(final Object o) { - return false; - } + public abstract boolean equals(Object o); } diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/Multiplication.java b/core/src/main/java/it/cavallium/warppi/math/functions/Multiplication.java index 01a905ff..a56bb81b 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/Multiplication.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/Multiplication.java @@ -21,11 +21,7 @@ public class Multiplication extends FunctionOperator { public boolean equals(final Object o) { if (o instanceof Multiplication) { final FunctionOperator f = (FunctionOperator) o; - if (parameter1.equals(f.getParameter1()) && parameter2.equals(f.getParameter2())) { - return true; - } else if (parameter1.equals(f.getParameter2()) && parameter2.equals(f.getParameter1())) { - return true; - } + return parameter1.equals(f.getParameter1()) && parameter2.equals(f.getParameter2()); } return false; } @@ -106,4 +102,4 @@ public class Multiplication extends FunctionOperator { public static Multiplication newNegative(final MathContext context, final Function value2) { return new Multiplication(context, new Number(context, -1), value2); } -} \ No newline at end of file +} diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/RootSquare.java b/core/src/main/java/it/cavallium/warppi/math/functions/RootSquare.java index db4596bd..99268730 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/RootSquare.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/RootSquare.java @@ -17,7 +17,7 @@ public class RootSquare extends FunctionOperator { @Override public boolean equals(final Object o) { - if (o instanceof Root || o instanceof RootSquare) { + if (o instanceof RootSquare) { final FunctionOperator f = (FunctionOperator) o; return parameter1.equals(f.getParameter1()) && parameter2.equals(f.getParameter2()); } diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/Sum.java b/core/src/main/java/it/cavallium/warppi/math/functions/Sum.java index f23a1422..31c9fd10 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/Sum.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/Sum.java @@ -16,11 +16,7 @@ public class Sum extends FunctionOperator { public boolean equals(final Object o) { if (o instanceof Sum) { final FunctionOperator f = (FunctionOperator) o; - if (parameter1.equals(f.getParameter1()) && parameter2.equals(f.getParameter2())) { - return true; - } else if (parameter1.equals(f.getParameter2()) && parameter2.equals(f.getParameter1())) { - return true; - } + return parameter1.equals(f.getParameter1()) && parameter2.equals(f.getParameter2()); } return false; } diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/Undefined.java b/core/src/main/java/it/cavallium/warppi/math/functions/Undefined.java index bfa90bb5..8d780c52 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/Undefined.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/Undefined.java @@ -28,7 +28,7 @@ public class Undefined implements Function { @Override public boolean equals(final Object o) { - return false; + return o instanceof Undefined; } @Override diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/equations/Equation.java b/core/src/main/java/it/cavallium/warppi/math/functions/equations/Equation.java index 210d9748..c5d5e551 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/equations/Equation.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/equations/Equation.java @@ -60,11 +60,7 @@ public class Equation extends FunctionOperator { public boolean equals(final Object o) { if (o instanceof Equation) { final FunctionOperator f = (FunctionOperator) o; - if (parameter1.equals(f.getParameter1()) && parameter2.equals(f.getParameter2())) { - return true; - } else if (parameter1.equals(f.getParameter2()) && parameter2.equals(f.getParameter1())) { - return true; - } + return parameter1.equals(f.getParameter1()) && parameter2.equals(f.getParameter2()); } return false; } @@ -79,4 +75,4 @@ public class Equation extends FunctionOperator { public Result accept(final Function.Visitor visitor, final Argument argument) { return visitor.visit(this, argument); } -} \ No newline at end of file +} diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/equations/EquationsSystem.java b/core/src/main/java/it/cavallium/warppi/math/functions/equations/EquationsSystem.java index c7cd1498..b58bc5b8 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/equations/EquationsSystem.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/equations/EquationsSystem.java @@ -24,19 +24,22 @@ public class EquationsSystem extends FunctionDynamic { @Override public boolean equals(final Object o) { - if (o instanceof EquationsSystem) { - final FunctionDynamic f = (FunctionDynamic) o; - if (functions.length != f.getParametersLength()) { + if (!(o instanceof EquationsSystem)) { + return false; + } + final FunctionDynamic f = (FunctionDynamic) o; + + if (functions.length != f.getParametersLength()) { + return false; + } + + for (int i = 0; i < functions.length; i++) { + if (!functions[i].equals(f.getParameter(i))) { return false; } - for (int i = 0; i < functions.length; i++) { - if (!functions[i].equals(f.getParameter(i))) { - return false; - } - } - return true; } - return false; + + return true; } @Override diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcCosine.java b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcCosine.java index 5786bd09..6a319e71 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcCosine.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcCosine.java @@ -18,9 +18,7 @@ public class ArcCosine extends FunctionSingle { public boolean equals(final Object o) { if (o instanceof ArcCosine) { final FunctionSingle f = (FunctionSingle) o; - if (parameter.equals(f.getParameter())) { - return true; - } + return parameter.equals(f.getParameter()); } return false; } diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcSine.java b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcSine.java index c8227b81..325f8e99 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcSine.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcSine.java @@ -18,9 +18,7 @@ public class ArcSine extends FunctionSingle { public boolean equals(final Object o) { if (o instanceof ArcSine) { final FunctionSingle f = (FunctionSingle) o; - if (parameter.equals(f.getParameter())) { - return true; - } + return parameter.equals(f.getParameter()); } return false; } diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcTangent.java b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcTangent.java index 885cdc60..f5844d5c 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcTangent.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/ArcTangent.java @@ -18,9 +18,7 @@ public class ArcTangent extends FunctionSingle { public boolean equals(final Object o) { if (o instanceof ArcTangent) { final FunctionSingle f = (FunctionSingle) o; - if (parameter.equals(f.getParameter())) { - return true; - } + return parameter.equals(f.getParameter()); } return false; } diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Cosine.java b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Cosine.java index d2619092..991b52c5 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Cosine.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Cosine.java @@ -18,9 +18,7 @@ public class Cosine extends FunctionSingle { public boolean equals(final Object o) { if (o instanceof Cosine) { final FunctionSingle f = (FunctionSingle) o; - if (parameter.equals(f.getParameter())) { - return true; - } + return parameter.equals(f.getParameter()); } return false; } diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Sine.java b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Sine.java index b4c35703..128caa77 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Sine.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Sine.java @@ -19,9 +19,7 @@ public class Sine extends FunctionSingle { public boolean equals(final Object o) { if (o instanceof Sine) { final FunctionSingle f = (FunctionSingle) o; - if (parameter.equals(f.getParameter())) { - return true; - } + return parameter.equals(f.getParameter()); } return false; } diff --git a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Tangent.java b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Tangent.java index 7f5de546..f7a46e9c 100644 --- a/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Tangent.java +++ b/core/src/main/java/it/cavallium/warppi/math/functions/trigonometry/Tangent.java @@ -17,9 +17,7 @@ public class Tangent extends FunctionSingle { public boolean equals(final Object o) { if (o instanceof Tangent) { final FunctionSingle f = (FunctionSingle) o; - if (parameter.equals(f.getParameter())) { - return true; - } + return parameter.equals(f.getParameter()); } return false; }