Skip to content

Commit 8f30096

Browse files
committed
feat: Add equals and hashCode implementations for Arity.
1 parent 4e02375 commit 8f30096

5 files changed

Lines changed: 88 additions & 0 deletions

File tree

src/main/java/cz/jirutka/rsql/parser/ast/Arity.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,25 @@ public interface Arity {
4747
*/
4848
int max();
4949

50+
/**
51+
* Compares this object with the specified object for equality. Two objects are considered equal if they represent
52+
* the same Arity, meaning their min and max are equal.
53+
*
54+
* @param o The object to be compared for equality with this object.
55+
* @return {@code true} if the specified object is equal to this object; {@code false} otherwise.
56+
*/
57+
@Override
58+
boolean equals(Object o);
59+
60+
/**
61+
* Returns the hash code value for this object. The hash code is computed based on the properties of the object and
62+
* ensures that equal objects have the same hash code.
63+
*
64+
* @return The hash code value for this object.
65+
*/
66+
@Override
67+
int hashCode();
68+
5069
/**
5170
* Creates arity with given {@code min} and {@code max}.
5271
*

src/main/java/cz/jirutka/rsql/parser/ast/DynamicArity.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,19 @@ public int min() {
5252
public int max() {
5353
return max;
5454
}
55+
56+
@Override
57+
public boolean equals(Object o) {
58+
if (!(o instanceof Arity)) {
59+
return false;
60+
}
61+
62+
Arity that = (Arity) o;
63+
return min == that.min() && max == that.max();
64+
}
65+
66+
@Override
67+
public int hashCode() {
68+
return Integer.hashCode(min) + (31 * Integer.hashCode(max));
69+
}
5570
}

src/main/java/cz/jirutka/rsql/parser/ast/NAry.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,19 @@ public int min() {
4444
public int max() {
4545
return n;
4646
}
47+
48+
@Override
49+
public boolean equals(Object o) {
50+
if (!(o instanceof Arity)) {
51+
return false;
52+
}
53+
54+
Arity that = (Arity) o;
55+
return n == that.min() && n == that.max();
56+
}
57+
58+
@Override
59+
public int hashCode() {
60+
return Integer.hashCode(n);
61+
}
4762
}

src/test/groovy/cz/jirutka/rsql/parser/ast/DynamicAritySpec.groovy

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cz.jirutka.rsql.parser.ast
22

3+
import nl.jqno.equalsverifier.EqualsVerifier
34
import spock.lang.Specification
45

56
class DynamicAritySpec extends Specification {
@@ -30,4 +31,21 @@ class DynamicAritySpec extends Specification {
3031
actual.min() == min
3132
actual.max() == max
3233
}
34+
35+
def 'Should be equal with n-ary'() {
36+
expect:
37+
//noinspection GrEqualsBetweenInconvertibleTypes
38+
new DynamicArity(0, 0) == new NAry(0)
39+
}
40+
41+
def 'Should not be equal with n-ary'() {
42+
expect:
43+
//noinspection GrEqualsBetweenInconvertibleTypes
44+
new DynamicArity(0, 0) != new NAry(1)
45+
}
46+
47+
def 'Should implement equals and hashCode'() {
48+
expect:
49+
EqualsVerifier.forClass(DynamicArity).verify()
50+
}
3351
}

src/test/groovy/cz/jirutka/rsql/parser/ast/NArySpec.groovy

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cz.jirutka.rsql.parser.ast
22

3+
import nl.jqno.equalsverifier.EqualsVerifier
34
import spock.lang.Specification
45

56
class NArySpec extends Specification {
@@ -23,4 +24,24 @@ class NArySpec extends Specification {
2324
where:
2425
n << [0, 1, 2, 32]
2526
}
27+
28+
def 'Should be equal with dynamic arity'() {
29+
expect:
30+
//noinspection GrEqualsBetweenInconvertibleTypes
31+
new NAry(0) == new DynamicArity(0, 0)
32+
}
33+
34+
def 'Should be not equal with dynamic arity'() {
35+
expect:
36+
//noinspection GrEqualsBetweenInconvertibleTypes
37+
new NAry(0) != a
38+
39+
where:
40+
a << [new DynamicArity(0, 1), new DynamicArity(1, 1)]
41+
}
42+
43+
def 'Should implement equals and hashCode'() {
44+
expect:
45+
EqualsVerifier.forClass(NAry).verify()
46+
}
2647
}

0 commit comments

Comments
 (0)