From 23744cf44eb105b86a7e00f0011fbe63286ae665 Mon Sep 17 00:00:00 2001
From: Ethan Ordentlich <eordentl@Caltech.edu>
Date: Sun, 10 Jan 2021 12:34:42 -0800
Subject: [PATCH 1/6] Move test interfaces to reflect project structure

---
 .../edu/caltech/cs2/datastructures/ArrayDequeTests.java  | 9 ++-------
 .../datastructures/CircularArrayFixedSizeQueueTests.java | 3 ++-
 .../edu/caltech/cs2/datastructures/LinkedDequeTests.java | 8 ++------
 .../ICollectionTests.java}                               | 6 +++---
 .../DequeTests.java => interfaces/IDequeTests.java}      | 6 ++----
 .../IFixedSizeQueueTests.java}                           | 7 +++----
 .../QueueTests.java => interfaces/IQueueTests.java}      | 4 ++--
 .../StackTests.java => interfaces/IStackTests.java}      | 4 ++--
 8 files changed, 18 insertions(+), 29 deletions(-)
 rename tests/edu/caltech/cs2/{datastructures/CollectionTests.java => interfaces/ICollectionTests.java} (97%)
 rename tests/edu/caltech/cs2/{datastructures/DequeTests.java => interfaces/IDequeTests.java} (98%)
 rename tests/edu/caltech/cs2/{datastructures/FixedSizeQueueTests.java => interfaces/IFixedSizeQueueTests.java} (93%)
 rename tests/edu/caltech/cs2/{datastructures/QueueTests.java => interfaces/IQueueTests.java} (97%)
 rename tests/edu/caltech/cs2/{datastructures/StackTests.java => interfaces/IStackTests.java} (97%)

diff --git a/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java b/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
index 9353415..8cba94c 100644
--- a/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
+++ b/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
@@ -3,19 +3,14 @@ package edu.caltech.cs2.datastructures;
 import edu.caltech.cs2.helpers.Inspection;
 import edu.caltech.cs2.helpers.Reflection;
 import edu.caltech.cs2.helpers.RuntimeInstrumentation;
-import edu.caltech.cs2.interfaces.ICollection;
-import edu.caltech.cs2.interfaces.IQueue;
-import edu.caltech.cs2.interfaces.IDeque;
-import edu.caltech.cs2.interfaces.IStack;
+import edu.caltech.cs2.interfaces.*;
 import org.junit.jupiter.api.*;
 import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvSource;
 import org.junit.jupiter.params.provider.ValueSource;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Stream;
@@ -26,7 +21,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 @Tag("C")
-public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
+public class ArrayDequeTests implements IDequeTests, IStackTests, IQueueTests {
   private static String ARRAY_DEQUE_SOURCE ="src/edu/caltech/cs2/datastructures/ArrayDeque.java";
 
   private Constructor arrayDequeConstructor = Reflection.getConstructor(ArrayDeque.class);
diff --git a/tests/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueueTests.java b/tests/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueueTests.java
index c1ca90d..c9e2b82 100644
--- a/tests/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueueTests.java
+++ b/tests/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueueTests.java
@@ -3,6 +3,7 @@ package edu.caltech.cs2.datastructures;
 import edu.caltech.cs2.helpers.Inspection;
 import edu.caltech.cs2.helpers.Reflection;
 import edu.caltech.cs2.helpers.RuntimeInstrumentation;
+import edu.caltech.cs2.interfaces.IFixedSizeQueueTests;
 import edu.caltech.cs2.interfaces.IFixedSizeQueue;
 import edu.caltech.cs2.interfaces.IQueue;
 import org.junit.jupiter.api.*;
@@ -21,7 +22,7 @@ import static org.junit.jupiter.api.Assertions.*;
 
 @Tag("B")
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-public class CircularArrayFixedSizeQueueTests implements FixedSizeQueueTests {
+public class CircularArrayFixedSizeQueueTests implements IFixedSizeQueueTests {
   private static String FIXED_QUEUE_SOURCE = "src/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueue.java";
 
   private Constructor circFixedSizeQueueConstructor = Reflection.getConstructor(CircularArrayFixedSizeQueue.class,
diff --git a/tests/edu/caltech/cs2/datastructures/LinkedDequeTests.java b/tests/edu/caltech/cs2/datastructures/LinkedDequeTests.java
index 4096150..0f5d47a 100644
--- a/tests/edu/caltech/cs2/datastructures/LinkedDequeTests.java
+++ b/tests/edu/caltech/cs2/datastructures/LinkedDequeTests.java
@@ -4,11 +4,7 @@ import edu.caltech.cs2.helpers.Inspection;
 import edu.caltech.cs2.helpers.NodeChecker;
 import edu.caltech.cs2.helpers.Reflection;
 import edu.caltech.cs2.helpers.RuntimeInstrumentation;
-import edu.caltech.cs2.interfaces.ICollection;
-import edu.caltech.cs2.interfaces.IDeque;
-import edu.caltech.cs2.interfaces.IQueue;
-import edu.caltech.cs2.interfaces.IStack;
-import edu.caltech.cs2.project03.Project03TestOrdering.*;
+import edu.caltech.cs2.interfaces.*;
 import org.junit.jupiter.api.*;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.CsvSource;
@@ -27,7 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 
 @Tag("C")
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
+public class LinkedDequeTests implements IDequeTests, IStackTests, IQueueTests {
   private static String LINKED_DEQUE_SOURCE = "src/edu/caltech/cs2/datastructures/LinkedDeque.java";
 
   private Constructor linkedDequeConstructor = Reflection.getConstructor(LinkedDeque.class);
diff --git a/tests/edu/caltech/cs2/datastructures/CollectionTests.java b/tests/edu/caltech/cs2/interfaces/ICollectionTests.java
similarity index 97%
rename from tests/edu/caltech/cs2/datastructures/CollectionTests.java
rename to tests/edu/caltech/cs2/interfaces/ICollectionTests.java
index bbc3b05..dd97298 100644
--- a/tests/edu/caltech/cs2/datastructures/CollectionTests.java
+++ b/tests/edu/caltech/cs2/interfaces/ICollectionTests.java
@@ -1,4 +1,4 @@
-package edu.caltech.cs2.datastructures;
+package edu.caltech.cs2.interfaces;
 
 import edu.caltech.cs2.interfaces.ICollection;
 import org.junit.jupiter.api.DisplayName;
@@ -17,7 +17,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public interface CollectionTests {
+public interface ICollectionTests {
     ICollection<Object> newCollection();
 
     @Order(collectionTestLevel)
@@ -124,7 +124,7 @@ public interface CollectionTests {
         // Shuffle order of nums and check that all are contained in the collection
         Collections.shuffle(nums);
         for (int num : nums) {
-            assertEquals(true, impl.contains(num), "value should be contained");
+            assertTrue(impl.contains(num), "value should be contained");
         }
 
         // Test that values not in collection are not contained
diff --git a/tests/edu/caltech/cs2/datastructures/DequeTests.java b/tests/edu/caltech/cs2/interfaces/IDequeTests.java
similarity index 98%
rename from tests/edu/caltech/cs2/datastructures/DequeTests.java
rename to tests/edu/caltech/cs2/interfaces/IDequeTests.java
index c2f1e69..7d8d904 100644
--- a/tests/edu/caltech/cs2/datastructures/DequeTests.java
+++ b/tests/edu/caltech/cs2/interfaces/IDequeTests.java
@@ -1,7 +1,5 @@
-package edu.caltech.cs2.datastructures;
+package edu.caltech.cs2.interfaces;
 
-import edu.caltech.cs2.interfaces.ICollection;
-import edu.caltech.cs2.interfaces.IDeque;
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.collection.IsEmptyIterable;
 import org.junit.jupiter.api.DisplayName;
@@ -20,7 +18,7 @@ import java.util.Random;
 import static edu.caltech.cs2.project03.Project03TestOrdering.*;
 import static org.junit.jupiter.api.Assertions.*;
 
-public interface DequeTests extends CollectionTests {
+public interface IDequeTests extends ICollectionTests {
     IDeque<Object> newDeque();
 
     @Order(dequeTestLevel)
diff --git a/tests/edu/caltech/cs2/datastructures/FixedSizeQueueTests.java b/tests/edu/caltech/cs2/interfaces/IFixedSizeQueueTests.java
similarity index 93%
rename from tests/edu/caltech/cs2/datastructures/FixedSizeQueueTests.java
rename to tests/edu/caltech/cs2/interfaces/IFixedSizeQueueTests.java
index fed881f..b60b17f 100644
--- a/tests/edu/caltech/cs2/datastructures/FixedSizeQueueTests.java
+++ b/tests/edu/caltech/cs2/interfaces/IFixedSizeQueueTests.java
@@ -1,10 +1,9 @@
-package edu.caltech.cs2.datastructures;
+package edu.caltech.cs2.interfaces;
 
+import edu.caltech.cs2.datastructures.CircularArrayFixedSizeQueue;
 import edu.caltech.cs2.helpers.Reflection;
-import edu.caltech.cs2.interfaces.IFixedSizeQueue;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Order;
-import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.CsvSource;
 
@@ -15,7 +14,7 @@ import java.util.Random;
 import static edu.caltech.cs2.project03.Project03TestOrdering.*;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public interface FixedSizeQueueTests extends QueueTests {
+public interface IFixedSizeQueueTests extends IQueueTests {
     IFixedSizeQueue<Object> newFixedSizeQueue(int capacity);
 
     @Order(fixedSizeQueueLevel)
diff --git a/tests/edu/caltech/cs2/datastructures/QueueTests.java b/tests/edu/caltech/cs2/interfaces/IQueueTests.java
similarity index 97%
rename from tests/edu/caltech/cs2/datastructures/QueueTests.java
rename to tests/edu/caltech/cs2/interfaces/IQueueTests.java
index 552b502..92bc04d 100644
--- a/tests/edu/caltech/cs2/datastructures/QueueTests.java
+++ b/tests/edu/caltech/cs2/interfaces/IQueueTests.java
@@ -1,4 +1,4 @@
-package edu.caltech.cs2.datastructures;
+package edu.caltech.cs2.interfaces;
 
 import edu.caltech.cs2.interfaces.IQueue;
 import edu.caltech.cs2.interfaces.IStack;
@@ -14,7 +14,7 @@ import java.util.Random;
 import static edu.caltech.cs2.project03.Project03TestOrdering.*;
 import static org.junit.jupiter.api.Assertions.*;
 
-public interface QueueTests {
+public interface IQueueTests {
     IQueue<Object> newQueue();
     IQueue<Object> newQueue(int size);
 
diff --git a/tests/edu/caltech/cs2/datastructures/StackTests.java b/tests/edu/caltech/cs2/interfaces/IStackTests.java
similarity index 97%
rename from tests/edu/caltech/cs2/datastructures/StackTests.java
rename to tests/edu/caltech/cs2/interfaces/IStackTests.java
index 95d7ce1..5878d80 100644
--- a/tests/edu/caltech/cs2/datastructures/StackTests.java
+++ b/tests/edu/caltech/cs2/interfaces/IStackTests.java
@@ -1,4 +1,4 @@
-package edu.caltech.cs2.datastructures;
+package edu.caltech.cs2.interfaces;
 
 import edu.caltech.cs2.interfaces.IStack;
 import org.junit.jupiter.api.DisplayName;
@@ -13,7 +13,7 @@ import static edu.caltech.cs2.project03.Project03TestOrdering.*;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
-public interface StackTests {
+public interface IStackTests {
     IStack<Object> newStack();
 
     @Order(stackTestLevel)
-- 
GitLab


From 1530bcd4b5e70cbd655dbebe16c98ddcc6ce986e Mon Sep 17 00:00:00 2001
From: Ethan Ordentlich <eordentl@Caltech.edu>
Date: Sun, 10 Jan 2021 12:46:19 -0800
Subject: [PATCH 2/6] Misc comment changes

---
 .../caltech/cs2/datastructures/LinkedDequeTests.java  | 11 ++++++++---
 tests/edu/caltech/cs2/interfaces/IDequeTests.java     |  5 +++--
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/tests/edu/caltech/cs2/datastructures/LinkedDequeTests.java b/tests/edu/caltech/cs2/datastructures/LinkedDequeTests.java
index 0f5d47a..83fd0af 100644
--- a/tests/edu/caltech/cs2/datastructures/LinkedDequeTests.java
+++ b/tests/edu/caltech/cs2/datastructures/LinkedDequeTests.java
@@ -110,7 +110,7 @@ public class LinkedDequeTests implements IDequeTests, IStackTests, IQueueTests {
   }
 
   @Order(classSpecificTestLevel)
-  @DisplayName("Check for linked node class")
+  @DisplayName("Check that LinkedDeque uses a node class")
   @Test
   public void testLinkedNode() {
     Class[] classes = LinkedDeque.class.getDeclaredClasses();
@@ -279,6 +279,8 @@ public class LinkedDequeTests implements IDequeTests, IStackTests, IQueueTests {
         8);
   }
 
+  // "LINKED-NESS" TESTS ------------------------------------------------
+
   @Order(dequeTestLevel)
   @DisplayName("Cycle detection for addFront(...), addBack(...), removeFront(...), and removeBack(...)")
   @ParameterizedTest(name = "Test cycles - {1} random numbers with seed = {0}")
@@ -289,7 +291,7 @@ public class LinkedDequeTests implements IDequeTests, IStackTests, IQueueTests {
     IDeque<Object> impl = new LinkedDeque<>();
     // Test that first peek is null
     assertNull(impl.peekFront(), "empty peek should return null");
-    // Test adding values updates size and displays contained correctly
+    // Randomly add / remove elements to the front / back
     for (int i = 0; i < size; i++) {
       int num = r.nextInt();
       if (num % 2 == 0) {
@@ -308,7 +310,9 @@ public class LinkedDequeTests implements IDequeTests, IStackTests, IQueueTests {
           impl.removeBack();
         }
       }
+      // After each operation, check whether cycles have formed
       NodeChecker.cycleDetection(impl, true);
+      // Sanity checks, though these aren't super necessary
       assertEquals(reference.size(), impl.size(), "size()s are not equal");
       assertEquals(reference.toString(), impl.toString(), "toStrings()s are not equal");
     }
@@ -324,7 +328,7 @@ public class LinkedDequeTests implements IDequeTests, IStackTests, IQueueTests {
     IDeque<Object> impl = new LinkedDeque<>();
     // Test that first peek is null
     assertNull(impl.peekFront(), "empty peek should return null");
-    // Test adding values updates size and displays contained correctly
+    // Randomly add / remove elements to the front / back
     for (int i = 0; i < size; i++) {
       int num = r.nextInt();
       if (num % 2 == 0) {
@@ -343,6 +347,7 @@ public class LinkedDequeTests implements IDequeTests, IStackTests, IQueueTests {
           impl.removeBack();
         }
       }
+      // Check that forwards and backwards iteration are sane
       NodeChecker.checkReverse(impl);
       assertEquals(reference.size(), impl.size(), "size()s are not equal");
       assertEquals(reference.toString(), impl.toString(), "toStrings()s are not equal");
diff --git a/tests/edu/caltech/cs2/interfaces/IDequeTests.java b/tests/edu/caltech/cs2/interfaces/IDequeTests.java
index 7d8d904..c885c98 100644
--- a/tests/edu/caltech/cs2/interfaces/IDequeTests.java
+++ b/tests/edu/caltech/cs2/interfaces/IDequeTests.java
@@ -40,7 +40,8 @@ public interface IDequeTests extends ICollectionTests {
             ref.addLast(value);
             MatcherAssert.assertThat(impl, IsIterableContainingInOrder.contains(ref.toArray()));
         }
-        for (Object value : inputs.trim().split(", ")) {
+        // Check that iterator is consistent while objects are removed from the back
+        for (Object ignored : inputs.trim().split(", ")) {
             MatcherAssert.assertThat(impl, IsIterableContainingInOrder.contains(ref.toArray()));
             impl.removeBack();
             ref.removeLast();
@@ -290,7 +291,7 @@ public interface IDequeTests extends ICollectionTests {
         }
         impl.addAll(coll);
         for (Object num : coll) {
-            assertTrue(impl.contains(num), "value should be contained in Deque");
+            assertTrue(impl.contains(num), "value should be contained in deque");
         }
     }
 }
-- 
GitLab


From 290faf92dd779e584e45f3b104dc59f7aa089e8f Mon Sep 17 00:00:00 2001
From: Ethan Ordentlich <eordentl@Caltech.edu>
Date: Sun, 10 Jan 2021 12:49:26 -0800
Subject: [PATCH 3/6] Switch ArrayDeque addBack / removeBack complexity to
 CONSTANT

Was there a reason for this to be LINEAR in the first place?
If so, just cherry pick and ignore me.
---
 tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java b/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
index 8cba94c..ad87790 100644
--- a/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
+++ b/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
@@ -188,8 +188,8 @@ public class ArrayDequeTests implements IDequeTests, IStackTests, IQueueTests {
     Consumer<IDeque<Integer>> addBack = (IDeque<Integer> q) -> q.addBack(0);
     Consumer<IDeque<Integer>> removeBack = (IDeque<Integer> q) -> q.removeBack();
 
-    RuntimeInstrumentation.assertAtMost("addBack", RuntimeInstrumentation.ComplexityType.LINEAR, provide, addBack, 8);
-    RuntimeInstrumentation.assertAtMost("removeBack", RuntimeInstrumentation.ComplexityType.LINEAR, provide, removeBack, 8);
+    RuntimeInstrumentation.assertAtMost("addBack", RuntimeInstrumentation.ComplexityType.CONSTANT, provide, addBack, 8);
+    RuntimeInstrumentation.assertAtMost("removeBack", RuntimeInstrumentation.ComplexityType.CONSTANT, provide, removeBack, 8);
   }
 
   @Order(complexityTestLevel)
-- 
GitLab


From 2860e23ac636ea7acd779c1c98296dd7e54f3508 Mon Sep 17 00:00:00 2001
From: Ethan Ordentlich <eordentl@Caltech.edu>
Date: Sun, 10 Jan 2021 13:23:05 -0800
Subject: [PATCH 4/6] Fix #4

Add test for array initial capacity
---
 .../cs2/datastructures/ArrayDequeTests.java   | 38 ++++++++++++++++++-
 .../cs2/project03/Project03TestOrdering.java  | 10 +++--
 2 files changed, 43 insertions(+), 5 deletions(-)

diff --git a/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java b/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
index ad87790..5ac09fb 100644
--- a/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
+++ b/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
@@ -17,7 +17,7 @@ import java.util.stream.Stream;
 
 import static edu.caltech.cs2.project03.Project03TestOrdering.*;
 import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.*;
 
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 @Tag("C")
@@ -126,6 +126,40 @@ public class ArrayDequeTests implements IDequeTests, IStackTests, IQueueTests {
     Inspection.assertConstructorHygiene(ARRAY_DEQUE_SOURCE);
   }
 
+  // ARRAYDEQUE TESTS ---------------------------------------------------
+
+  @Order(implSpecificTestLevel)
+  @Test
+  public void testArrayDequeDefaultInitialCapacity() throws IllegalAccessException {
+    ArrayDeque<Integer> impl = new ArrayDeque<>();
+
+    // Reflect and get the backing array
+    Field arr = Reflection.getFieldByType(ArrayDeque.class, int[].class);
+    arr.setAccessible(true);
+    int[] backingArray = (int[]) arr.get(impl);
+
+    assertEquals(10, backingArray.length, "Default initial capacity is not 10");
+  }
+
+  @Order(implSpecificTestLevel)
+  @DisplayName("enqueue should always succeed")
+  @Test
+  public void testThatArrayDequeEnqueueAlwaysSucceeds() {
+    ArrayDeque<Integer> impl = new ArrayDeque<>();
+    for (int i = 0; i < 100; i ++) {
+      assertTrue(impl.enqueue(i), "enqueue should always succeed for ArrayDeque");
+    }
+  }
+
+  @Order(implSpecificTestLevel)
+  @DisplayName("push should always succeed")
+  @Test
+  public void testThatArrayDequePushAlwaysSucceeds() {
+    ArrayDeque<Integer> impl = new ArrayDeque<>();
+    for (int i = 0; i < 100; i ++) {
+      assertTrue(impl.push(i), "push should always succeed for ArrayDeque");
+    }
+  }
 
   // TOSTRING TESTS ---------------------------------------------------
 
@@ -174,7 +208,7 @@ public class ArrayDequeTests implements IDequeTests, IStackTests, IQueueTests {
   }
 
   @Order(complexityTestLevel)
-  @DisplayName("addBack() and removeBack() take linear time")
+  @DisplayName("addBack() and removeBack() take constant time")
   @Timeout(value = 20, unit = SECONDS)
   @Test
   public void testBackDequeOperationComplexity() {
diff --git a/tests/edu/caltech/cs2/project03/Project03TestOrdering.java b/tests/edu/caltech/cs2/project03/Project03TestOrdering.java
index 1cbf631..86a4c34 100644
--- a/tests/edu/caltech/cs2/project03/Project03TestOrdering.java
+++ b/tests/edu/caltech/cs2/project03/Project03TestOrdering.java
@@ -5,6 +5,7 @@ public final class Project03TestOrdering {
         throw new InstantiationError("Class is only for storing constant variables");
     }
 
+    // Tests related to class structure
     public static final int classSpecificTestLevel = 0;
 
     public static final int collectionTestLevel = 1;
@@ -14,8 +15,11 @@ public final class Project03TestOrdering {
 
     public static final int fixedSizeQueueLevel = 3;
 
-    public static final int toStringTestLevel = 4;
-    public static final int complexityTestLevel = 5;
+    // Tests related to the particular implementation
+    public static final int implSpecificTestLevel = 4;
 
-    public static final int guitarStringTestLevel = 6;
+    public static final int toStringTestLevel = 5;
+    public static final int complexityTestLevel = 6;
+
+    public static final int guitarStringTestLevel = 7;
 }
-- 
GitLab


From 730392cc6d0fd306d5303ecef58012878386ca17 Mon Sep 17 00:00:00 2001
From: Ethan Ordentlich <eordentl@Caltech.edu>
Date: Mon, 11 Jan 2021 15:26:10 -0800
Subject: [PATCH 5/6] Fix test for array capacity

---
 .../caltech/cs2/datastructures/ArrayDequeTests.java  | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java b/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
index 5ac09fb..3d50ffa 100644
--- a/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
+++ b/tests/edu/caltech/cs2/datastructures/ArrayDequeTests.java
@@ -129,14 +129,18 @@ public class ArrayDequeTests implements IDequeTests, IStackTests, IQueueTests {
   // ARRAYDEQUE TESTS ---------------------------------------------------
 
   @Order(implSpecificTestLevel)
+  @DisplayName("The default capacity of the array is 10")
   @Test
   public void testArrayDequeDefaultInitialCapacity() throws IllegalAccessException {
     ArrayDeque<Integer> impl = new ArrayDeque<>();
 
     // Reflect and get the backing array
-    Field arr = Reflection.getFieldByType(ArrayDeque.class, int[].class);
+    // It's actually an Object[] since that's how it (should!) be initialized internally
+    // Casting it doesn't change the type of the field.
+    // It's fine since there should only be one array.
+    Field arr = Reflection.getFieldByType(ArrayDeque.class, Object[].class);
     arr.setAccessible(true);
-    int[] backingArray = (int[]) arr.get(impl);
+    Integer[] backingArray = (Integer[]) arr.get(impl);
 
     assertEquals(10, backingArray.length, "Default initial capacity is not 10");
   }
@@ -147,7 +151,7 @@ public class ArrayDequeTests implements IDequeTests, IStackTests, IQueueTests {
   public void testThatArrayDequeEnqueueAlwaysSucceeds() {
     ArrayDeque<Integer> impl = new ArrayDeque<>();
     for (int i = 0; i < 100; i ++) {
-      assertTrue(impl.enqueue(i), "enqueue should always succeed for ArrayDeque");
+      assertTrue(impl.enqueue(i), "enqueue() should always succeed for ArrayDeque");
     }
   }
 
@@ -157,7 +161,7 @@ public class ArrayDequeTests implements IDequeTests, IStackTests, IQueueTests {
   public void testThatArrayDequePushAlwaysSucceeds() {
     ArrayDeque<Integer> impl = new ArrayDeque<>();
     for (int i = 0; i < 100; i ++) {
-      assertTrue(impl.push(i), "push should always succeed for ArrayDeque");
+      assertTrue(impl.push(i), "push() should always succeed for ArrayDeque");
     }
   }
 
-- 
GitLab


From 328b35dedf39dfb82528f815e66f156aace2c94c Mon Sep 17 00:00:00 2001
From: Ethan Ordentlich <eordentl@Caltech.edu>
Date: Mon, 11 Jan 2021 15:29:31 -0800
Subject: [PATCH 6/6] Switch IDequeTests.testAddAll to check the iterator

---
 tests/edu/caltech/cs2/interfaces/IDequeTests.java | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/tests/edu/caltech/cs2/interfaces/IDequeTests.java b/tests/edu/caltech/cs2/interfaces/IDequeTests.java
index c885c98..befe84f 100644
--- a/tests/edu/caltech/cs2/interfaces/IDequeTests.java
+++ b/tests/edu/caltech/cs2/interfaces/IDequeTests.java
@@ -290,8 +290,7 @@ public interface IDequeTests extends ICollectionTests {
             coll.add(num);
         }
         impl.addAll(coll);
-        for (Object num : coll) {
-            assertTrue(impl.contains(num), "value should be contained in deque");
-        }
+
+        MatcherAssert.assertThat("IDeque has incorrect elements / order", impl, IsIterableContainingInOrder.contains(coll));
     }
 }
-- 
GitLab