Skip to content

Commit f9b10be

Browse files
committed
adding eq
1 parent 25a7e0f commit f9b10be

File tree

2 files changed

+54
-0
lines changed
  • src
    • main/java/com/jnape/palatable/lambda/functions/builtin/fn2
    • test/java/com/jnape/palatable/lambda/functions/builtin/fn2

2 files changed

+54
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.jnape.palatable.lambda.functions.builtin.fn2;
2+
3+
import com.jnape.palatable.lambda.functions.Fn1;
4+
import com.jnape.palatable.lambda.functions.Fn2;
5+
6+
/**
7+
* Type-safe equality in function form; uses {@link Object#equals}, not <code>==</code>.
8+
*
9+
* @param <A> the type to compare for equality
10+
*/
11+
public final class Eq<A> implements Fn2<A, A, Boolean> {
12+
13+
private Eq() {
14+
}
15+
16+
@Override
17+
public Boolean apply(A x, A y) {
18+
return x == null ? y == null : x.equals(y);
19+
}
20+
21+
public static <A> Eq<A> eq() {
22+
return new Eq<>();
23+
}
24+
25+
public static <A> Fn1<A, Boolean> eq(A x) {
26+
return Eq.<A>eq().apply(x);
27+
}
28+
29+
public static <A> Boolean eq(A x, A y) {
30+
return eq(x).apply(y);
31+
}
32+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.jnape.palatable.lambda.functions.builtin.fn2;
2+
3+
import org.junit.Test;
4+
5+
import static com.jnape.palatable.lambda.functions.builtin.fn2.Eq.eq;
6+
import static org.junit.Assert.assertFalse;
7+
import static org.junit.Assert.assertTrue;
8+
9+
public class EqTest {
10+
11+
@Test
12+
public void testsValueEquality() {
13+
Eq<String> stringEq = eq();
14+
15+
assertTrue(stringEq.apply("a", "a"));
16+
assertFalse(stringEq.apply("a", "b"));
17+
assertFalse(stringEq.apply("b", "a"));
18+
assertTrue(stringEq.apply(null, null));
19+
assertFalse(stringEq.apply("a", null));
20+
assertFalse(stringEq.apply(null, "a"));
21+
}
22+
}

0 commit comments

Comments
 (0)