java-cons

This small, one interface project is a try to reimplement the mechanics used in Rackets cons cells in Java.
git clone git://git.oshgnacknak.de/java-cons.git
Log | Files | Refs | README

commit d9fc77bd641ab1815d3421e60797128a6af3c2df
parent 6b05521344b6683cf9af52679f470aea1e258a9e
Author: Oshgnacknak <osh@oshgnacknak.de>
Date:   Fri, 15 Jan 2021 00:36:47 +0100

Add method empty

Diffstat:
Msrc/Cons.java | 2++
Msrc/ConsTest.java | 2++
Msrc/Empty.java | 5+++++
Msrc/EmptyTest.java | 5+++++
Msrc/NonEmpty.java | 5+++++
Msrc/NonEmptyTest.java | 5+++++
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());