summaryrefslogtreecommitdiff
path: root/src/test/java
diff options
context:
space:
mode:
authorBen Culkin <scorpress@gmail.com>2020-12-14 18:24:47 -0500
committerBen Culkin <scorpress@gmail.com>2020-12-14 18:24:47 -0500
commitc7a398170fe3bc8b0a9c0014d8e8183e392eda83 (patch)
tree78c715d0e9a8fade32571223b241aefe68124951 /src/test/java
parent9e83c2fdf91b6f79b1e879c39ccb7c399014c39d (diff)
Implement NestList
NestList is a recursive list structure, inspired by the way lists work in Rakudo (formerly Perl 6).
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/bjc/esodata/NestListTest.java119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/test/java/bjc/esodata/NestListTest.java b/src/test/java/bjc/esodata/NestListTest.java
new file mode 100644
index 0000000..ff3723e
--- /dev/null
+++ b/src/test/java/bjc/esodata/NestListTest.java
@@ -0,0 +1,119 @@
+package bjc.esodata;
+
+import static org.junit.Assert.*;
+
+import java.util.*;
+
+import org.junit.*;
+
+import bjc.*;
+
+@SuppressWarnings("javadoc")
+public class NestListTest
+{
+
+ @Test
+ public void testAddItemElement() {
+ NestList<String> nl = new NestList<>();
+
+ assertEquals("NestLists are created empty", 0, nl.size());
+
+ nl.addItems("hello", "there");
+
+ assertEquals("Adding two items to an empty NestList makes it size 2",
+ 2, nl.size());
+ }
+
+ @Test
+ public void testAddItemNestListOfElement() {
+ NestList<String> nl = new NestList<>();
+
+ NestList<String> nl2 = new NestList<>();
+
+ nl2.addItem("friend");
+
+ nl.addItems("hello", "there");
+ nl.addItem(nl2);
+
+ assertEquals("Adding a sublist increases the size of NestList by 1",
+ 3, nl.size());
+ }
+
+ @Test
+ public void testAddSublist() {
+ NestList<String> nl = new NestList<>();
+
+ nl.addSublist("here", "is", "a");
+ nl.addItem("thing");
+
+ assertEquals("addSublist increases size of NestList by 1", 2, nl.size());
+ }
+
+ @Test
+ public void testFlatIterator() {
+ NestList<String> nl1 = new NestList<>();
+ NestList<String> nl2 = new NestList<>();
+ NestList<String> nl3 = new NestList<>();
+
+ nl1.addItems("of", "means");
+
+ nl2.addItem(nl1);
+
+ nl3.addItem("Hello");
+ nl3.addSublist("my", "unfortunate");
+ nl3.addItem("friend");
+ nl3.addItem(nl2);
+
+ TestUtils.assertIteratorEquals(nl3.flatIterator(),
+ "Hello", "my", "unfortunate", "friend", "of", "means");
+ }
+
+ @Test
+ public void testFlatten() {
+ NestList<String> nl1A = new NestList<>();
+ NestList<String> nl2A = new NestList<>();
+ NestList<String> nl3A = new NestList<>();
+
+ nl1A.addItems("of", "means");
+
+ nl2A.addItem(nl1A);
+
+ nl3A.addItem("Hello");
+ nl3A.addSublist("my", "unfortunate");
+ nl3A.addItem("friend");
+ nl3A.addItem(nl2A);
+
+ NestList<String> nl1B = new NestList<>();
+ NestList<String> nl2B = new NestList<>();
+
+ nl1B.addItems("of", "means");
+
+ nl2B.addItems("Hello", "my", "unfortunate", "friend");
+ nl2B.addItem(nl1B);
+
+ assertEquals("Flatten removes one level of nesting",
+ nl2B, nl3A.flatten());
+ }
+
+ @Test
+ public void testDeepFlatten() {
+ NestList<String> nl1 = new NestList<>();
+ NestList<String> nl2 = new NestList<>();
+ NestList<String> nl3 = new NestList<>();
+
+ nl1.addItems("of", "means");
+
+ nl2.addItem(nl1);
+
+ nl3.addItem("Hello");
+ nl3.addSublist("my", "unfortunate");
+ nl3.addItem("friend");
+ nl3.addItem(nl2);
+
+ List<String> testList = Arrays.asList(
+ "Hello", "my", "unfortunate", "friend", "of", "means");
+
+ assertEquals("deepFlatten flattens out all sublists",
+ testList, nl3.deepFlatten());
+ }
+}