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

NonEmptyTest.java (2150B)


      1 import org.junit.jupiter.api.Test;
      2 
      3 import static org.junit.jupiter.api.Assertions.*;
      4 
      5 class NonEmptyTest {
      6 
      7     Cons<Integer> cons = new NonEmpty<>(1, new NonEmpty<>(2, new NonEmpty<>(3, new Empty<>())));
      8     Cons<String> stringCons = new NonEmpty<>("Hallo", new NonEmpty<>("Welt", new Empty<>()));
      9 
     10     @Test
     11     void testFirst() {
     12         assertEquals(1, cons.first());
     13     }
     14 
     15     @Test
     16     void testRest() {
     17         var expected = new NonEmpty<>(2, new NonEmpty<>(3, new Empty<>()));
     18         assertEquals(expected, cons.rest());
     19 
     20         var sExpected = new NonEmpty<>("Welt", new Empty<>());
     21         assertEquals(sExpected, stringCons.rest());
     22 
     23         assertThrows(UnsupportedOperationException.class, () ->
     24             cons.rest().rest().rest().rest().rest());
     25     }
     26 
     27     @Test
     28     void testMap() {
     29         var expected = new NonEmpty<>(1, new NonEmpty<>(4, new NonEmpty<>(9, new Empty<>())));
     30         assertEquals(expected, cons.map(n -> n*n));
     31 
     32         expected = new NonEmpty<>(5, new NonEmpty<>(4, new Empty<>()));
     33         assertEquals(expected, stringCons.map(String::length));
     34     }
     35 
     36     @Test
     37     void testFilter() {
     38         var expected = new NonEmpty<>(1, new NonEmpty<>(3, new Empty<>()));
     39         assertEquals(expected, cons.filter(n -> n % 2 == 1));
     40         assertEquals(new Empty<>(), cons.filter(n -> n > 10));
     41 
     42         var sExpected = new NonEmpty<>("Hallo", new Empty<>());
     43         assertEquals(sExpected, stringCons.filter(s -> s.startsWith("Ha")));
     44     }
     45 
     46     @Test
     47     void testFoldl() {
     48         assertEquals(6, cons.foldl(Integer::sum, 0));
     49         assertEquals("WeltHallo", stringCons.foldl(String::concat, ""));
     50     }
     51 
     52     @Test
     53     void testFoldr() {
     54         assertEquals(6, cons.foldr(Integer::sum, 0));
     55         assertEquals("HalloWelt", stringCons.foldr(String::concat, ""));
     56     }
     57 
     58     @Test
     59     void testEmpty() {
     60         assertFalse(cons.empty());
     61     }
     62 
     63     @Test
     64     void testToString() {
     65         var expected = "(cons 1 (cons 2 (cons 3 empty)))";
     66         assertEquals(expected, cons.toString());
     67 
     68         expected = "(cons Hallo (cons Welt empty))";
     69         assertEquals(expected, stringCons.toString());
     70     }
     71 }