Skip to content

Commit ca67637

Browse files
committed
Implement Vector equals
Signed-off-by: Gábor Lipták <gliptak@gmail.com>
1 parent e75b8c1 commit ca67637

File tree

8 files changed

+122
-8
lines changed

8 files changed

+122
-8
lines changed

core/src/main/java/fj/data/vector/V2.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ private V2(final P2<A, A> inner) {
2323
this.inner = inner;
2424
}
2525

26+
@Override
27+
public final boolean equals(Object other) {
28+
return Equal.equals0(V2.class, this, other, () -> Equal.v2Equal(Equal.anyEqual()));
29+
}
30+
31+
@Override
32+
public final int hashCode() {
33+
return Hash.v2Hash(Hash.<A>anyHash()).hash(this);
34+
}
35+
2636
/**
2737
* Creates a vector-2 from a homogeneous product-2.
2838
*

core/src/main/java/fj/data/vector/V3.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ private V3(final P1<A> head, final V2<A> tail) {
2323
this.tail = tail;
2424
}
2525

26+
@Override
27+
public final boolean equals(Object other) {
28+
return Equal.equals0(V3.class, this, other, () -> Equal.v3Equal(Equal.anyEqual()));
29+
}
30+
31+
@Override
32+
public final int hashCode() {
33+
return Hash.v3Hash(Hash.<A>anyHash()).hash(this);
34+
}
35+
2636
/**
2737
* Creates a vector-3 from a homogeneous product-3.
2838
*

core/src/main/java/fj/data/vector/V4.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ private V4(final P1<A> head, final V3<A> tail) {
2323
this.tail = tail;
2424
}
2525

26+
@Override
27+
public final boolean equals(Object other) {
28+
return Equal.equals0(V4.class, this, other, () -> Equal.v4Equal(Equal.anyEqual()));
29+
}
30+
31+
@Override
32+
public final int hashCode() {
33+
return Hash.v4Hash(Hash.<A>anyHash()).hash(this);
34+
}
35+
2636
/**
2737
* Creates a vector-4 from a homogeneous product-4.
2838
*

core/src/main/java/fj/data/vector/V5.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ private V5(final P1<A> head, final V4<A> tail) {
2323
this.tail = tail;
2424
}
2525

26+
@Override
27+
public final boolean equals(Object other) {
28+
return Equal.equals0(V5.class, this, other, () -> Equal.v5Equal(Equal.anyEqual()));
29+
}
30+
31+
@Override
32+
public final int hashCode() {
33+
return Hash.v5Hash(Hash.<A>anyHash()).hash(this);
34+
}
35+
2636
/**
2737
* Creates a vector-5 from a homogeneous product-5.
2838
*

core/src/main/java/fj/data/vector/V6.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ private V6(final P1<A> head, final V5<A> tail) {
2323
this.tail = tail;
2424
}
2525

26+
@Override
27+
public final boolean equals(Object other) {
28+
return Equal.equals0(V6.class, this, other, () -> Equal.v6Equal(Equal.anyEqual()));
29+
}
30+
31+
@Override
32+
public final int hashCode() {
33+
return Hash.v6Hash(Hash.<A>anyHash()).hash(this);
34+
}
35+
2636
/**
2737
* Creates a vector-6 from a homogeneous product-6.
2838
*

core/src/main/java/fj/data/vector/V7.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ private V7(final P1<A> head, final V6<A> tail) {
2323
this.tail = tail;
2424
}
2525

26+
@Override
27+
public final boolean equals(Object other) {
28+
return Equal.equals0(V7.class, this, other, () -> Equal.v7Equal(Equal.anyEqual()));
29+
}
30+
31+
@Override
32+
public final int hashCode() {
33+
return Hash.v7Hash(Hash.<A>anyHash()).hash(this);
34+
}
35+
2636
/**
2737
* Creates a vector-7 from a homogeneous product-7.
2838
*

core/src/main/java/fj/data/vector/V8.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ private V8(final P1<A> head, final V7<A> tail) {
2323
this.tail = tail;
2424
}
2525

26+
@Override
27+
public final boolean equals(Object other) {
28+
return Equal.equals0(V8.class, this, other, () -> Equal.v8Equal(Equal.anyEqual()));
29+
}
30+
31+
@Override
32+
public final int hashCode() {
33+
return Hash.v8Hash(Hash.<A>anyHash()).hash(this);
34+
}
35+
2636
/**
2737
* Creates a vector-8 from a homogeneous product-8.
2838
*

core/src/test/java/fj/data/vector/VTest.java

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
package fj.data.vector;
22

3-
import fj.P;
4-
import fj.P2;
5-
import fj.P3;
6-
import fj.P4;
7-
import fj.P5;
8-
import fj.P6;
9-
import fj.P7;
10-
import fj.P8;
3+
import fj.*;
114
import fj.data.Array;
125
import org.junit.Test;
136

@@ -59,4 +52,55 @@ public void testVectorP(){
5952
assertThat(v8.toArray(), is(Array.range(1, 9)));
6053
assertThat(v8.p(), is(p8));
6154
}
55+
56+
@Test
57+
public void testVectorFunc2() {
58+
V2<Integer> v2 = V.v(() -> 2, () -> 1);
59+
F2<Integer, Integer, V2<Integer>> fv2 = V.v2();
60+
V2<Integer> vf2 = fv2.f(2, 1);
61+
assertThat(vf2, is(v2));
62+
}
63+
64+
@Test
65+
public void testVectorFunc3() {
66+
V3<Integer> v3 = V.v(P.p(3), () -> 2, () -> 1);
67+
F3<Integer, Integer, Integer, V3<Integer>> fv3 = V.v3();
68+
V3<Integer> vf3 = fv3.f(3, 2, 1);
69+
assertThat(vf3, is(v3));
70+
}
71+
72+
@Test
73+
public void testVectorFunc4() {
74+
V4<Integer> v4 = V.v(P.p(4), P.p(3), () -> 2, () -> 1);
75+
F4<Integer, Integer, Integer, Integer, V4<Integer>> fv4 = V.v4();
76+
V4<Integer> vf4 = fv4.f(4, 3, 2, 1);
77+
assertThat(vf4, is(v4));
78+
}
79+
80+
@Test
81+
public void testVectorFunc5() {
82+
V5<Integer> v5 = V.v(P.p(5), P.p(4), P.p(3), () -> 2, () -> 1);
83+
F5<Integer, Integer, Integer, Integer, Integer, V5<Integer>> fv5 = V.v5();
84+
V5<Integer> vf5 = fv5.f(5, 4, 3, 2, 1);
85+
assertThat(vf5, is(v5));
86+
}
87+
88+
@Test
89+
public void testVectorMap() {
90+
final V2<Integer> v2 = V.v(() -> 2, () -> 1);
91+
assertThat(v2, is(v2.map(i -> i * 1)));
92+
final V3<Integer> v3 = V3.cons(P.p(3), v2);
93+
assertThat(v3, is(v3.map(i -> i * 1)));
94+
final V4<Integer> v4 = V4.cons(P.p(4), v3);
95+
assertThat(v4, is(v4.map(i -> i * 1)));
96+
final V5<Integer> v5 = V5.cons(P.p(5), v4);
97+
assertThat(v5, is(v5.map(i -> i * 1)));
98+
final V6<Integer> v6 = V6.cons(P.p(6), v5);
99+
assertThat(v6, is(v6.map(i -> i * 1)));
100+
final V7<Integer> v7 = V7.cons(P.p(7), v6);
101+
assertThat(v7, is(v7.map(i -> i * 1)));
102+
final V8<Integer> v8 = V8.cons(P.p(8), v7);
103+
assertThat(v8, is(v8.map(i -> i * 1)));
104+
}
105+
62106
}

0 commit comments

Comments
 (0)