commit d9fc77bd641ab1815d3421e60797128a6af3c2df
parent 6b05521344b6683cf9af52679f470aea1e258a9e
Author: Oshgnacknak <osh@oshgnacknak.de>
Date: Fri, 15 Jan 2021 00:36:47 +0100
Add method empty
Diffstat:
6 files changed, 24 insertions(+), 0 deletions(-)
diff --git a/src/Cons.java b/src/Cons.java
@@ -16,6 +16,8 @@ public interface Cons<V> {
<W> W foldr(BiFunction<V, W, W> f, W init);
+ boolean empty();
+
@SafeVarargs
static <V> Cons<V> of(V... arr) {
return fromArray(0, arr);
diff --git a/src/ConsTest.java b/src/ConsTest.java
@@ -8,12 +8,14 @@ class ConsTest {
void testOf() {
var cons = Cons.of(1, 2, 3, 4);
assertEquals(3, cons.rest().rest().first());
+ assertFalse(cons.empty());
assertEquals("(cons 1 (cons 2 (cons 3 (cons 4 empty))))", cons.toString());
}
@Test
void testOfNone() {
var cons = Cons.of();
+ assertTrue(cons.empty());
assertEquals(new Empty<>(), cons);
assertEquals("empty", cons.toString());
}
diff --git a/src/Empty.java b/src/Empty.java
@@ -40,6 +40,11 @@ public class Empty<V> implements Cons<V> {
}
@Override
+ public boolean empty() {
+ return true;
+ }
+
+ @Override
public String toString() {
return "empty";
}
diff --git a/src/EmptyTest.java b/src/EmptyTest.java
@@ -37,6 +37,11 @@ class EmptyTest {
}
@Test
+ void testEmpty() {
+ assertTrue(empty.empty());
+ }
+
+ @Test
void testToString() {
assertEquals("empty", empty.toString());
}
diff --git a/src/NonEmpty.java b/src/NonEmpty.java
@@ -49,6 +49,11 @@ public class NonEmpty<V> implements Cons<V> {
}
@Override
+ public boolean empty() {
+ return false;
+ }
+
+ @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Cons)) return false;
diff --git a/src/NonEmptyTest.java b/src/NonEmptyTest.java
@@ -56,6 +56,11 @@ class NonEmptyTest {
}
@Test
+ void testEmpty() {
+ assertFalse(cons.empty());
+ }
+
+ @Test
void testToString() {
var expected = "(cons 1 (cons 2 (cons 3 empty)))";
assertEquals(expected, cons.toString());