From f8d205c88434a8aba5d96802b7ad08fef9355382 Mon Sep 17 00:00:00 2001 From: Archie Shahidullah <archie@caltech.edu> Date: Mon, 27 Jul 2020 13:50:39 -0700 Subject: [PATCH] Update CircularArrayFixedSizeQueueTests.java --- .../CircularArrayFixedSizeQueueTests.java | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/tests/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueueTests.java b/tests/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueueTests.java index 6123c3f..9ec19ce 100644 --- a/tests/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueueTests.java +++ b/tests/edu/caltech/cs2/datastructures/CircularArrayFixedSizeQueueTests.java @@ -17,6 +17,7 @@ import java.util.function.Function; import static edu.caltech.cs2.project03.Project03TestOrdering.*; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; @Tag("B") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @@ -70,6 +71,13 @@ public class CircularArrayFixedSizeQueueTests implements FixedSizeQueueTests { Reflection.assertNoPublicFields(CircularArrayFixedSizeQueue.class); } + @Order(classSpecificTestLevel) + @DisplayName("There are no protected fields") + @Test + public void testNoProtectedFields() { + Reflection.assertNoProtectedFields(LinkedDeque.class); + } + @Order(classSpecificTestLevel) @DisplayName("The public interface is correct") @Test @@ -158,4 +166,44 @@ public class CircularArrayFixedSizeQueueTests implements FixedSizeQueueTests { RuntimeInstrumentation.assertAtMost("peek", RuntimeInstrumentation.ComplexityType.CONSTANT, provide, peek, 8); } -} \ No newline at end of file + + @Order(fixedSizeQueueLevel) + @DisplayName("Test iterator matches reference") + @ParameterizedTest(name = "Test iterator with {1} random values with seed = {0} and fixed array size = {2}") + @CsvSource({ + "69, 200, 20", "21, 300, 200" + }) + public void testWrapAround(int seed, int numVals, int queueSize) { + Random r = new Random(seed); + Constructor c = Reflection.getConstructor(CircularArrayFixedSizeQueue.class, int.class); + IFixedSizeQueue<Object> me = newFixedSizeQueue(queueSize); + Queue<Object> reference = new java.util.ArrayDeque<>(); + assertEquals(queueSize, me.capacity(), "capacity does not match expected value"); + for (int i = 0; i < queueSize; i++) { + int num = r.nextInt(); + assertEquals(false, me.isFull(), "queue should not be full"); + assertEquals(true, me.enqueue(num), "enqueue should be successful"); + reference.add(num); + + } + for (int i = 0; i < numVals; i++) { + me.enqueue(me.dequeue()); + reference.add(reference.remove()); + assertEquals(reference.peek(), me.peek(),"return values of peek()s are not equal"); + assertEquals(reference.size(), me.size(), "size()s are not equal"); + assertEquals(queueSize, me.capacity(), "capacity does not match expected value"); + Iterator<Object> meItr = me.iterator(); + Iterator<Object> refItr = reference.iterator(); + while (meItr.hasNext()) { + if (!refItr.hasNext()) { + fail("Implemented queue has more values than reference queue"); + } + assertEquals(refItr.next(), meItr.next(), "next()s are not equal"); + } + if (refItr.hasNext()) { + fail("Reference queue has more values than implemented queue"); + } + } + } +} + -- GitLab