Commit d92faa87 authored by Archie Shahidullah's avatar Archie Shahidullah :expressionless:
Browse files

timeout tests and other fixes

parent 656caae1
1 merge request!1Review Tests for Project 3
Pipeline #36467 canceled with stage
Showing with 54 additions and 22 deletions
+54 -22
......@@ -15,17 +15,19 @@ 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;
import static edu.caltech.cs2.project03.Project03TestOrdering.*;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.junit.jupiter.api.Assertions.assertEquals;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@Tag("C")
public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
private static String ARRAY_DEQUE_SOURCE = "src/edu/caltech/cs2/datastructures/ArrayDeque.java";
private static String ARRAY_DEQUE_SOURCE ="src/edu/caltech/cs2/datastructures/ArrayDeque.java";
private Constructor arrayDequeConstructor = Reflection.getConstructor(ArrayDeque.class);
......@@ -42,7 +44,7 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
}
public IQueue<Object> newQueue() {
return Reflection.newInstance(arrayDequeConstructor);
return Reflection.newInstance(arrayDequeConstructor);
}
public IQueue<Object> newQueue(int size) {
......@@ -104,8 +106,22 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
@DisplayName("The public interface is correct")
@Test
public void testPublicInterface() {
Reflection.assertPublicInterface(ArrayDeque.class, List.of("addFront", "addBack", "removeFront", "removeBack",
"enqueue", "dequeue", "push", "pop", "peek", "peekFront", "peekBack", "iterator", "size", "toString"));
Reflection.assertPublicInterface(ArrayDeque.class, List.of(
"addFront",
"addBack",
"removeFront",
"removeBack",
"enqueue",
"dequeue",
"push",
"pop",
"peek",
"peekFront",
"peekBack",
"iterator",
"size",
"toString"
));
}
@Order(classSpecificTestLevel)
......@@ -115,6 +131,7 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
Inspection.assertConstructorHygiene(ARRAY_DEQUE_SOURCE);
}
// TOSTRING TESTS ---------------------------------------------------
@Order(toStringTestLevel)
......@@ -127,7 +144,9 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
@Order(toStringTestLevel)
@DisplayName("toString() matches java.util.ArrayDeque")
@ParameterizedTest(name = "Test toString() on [{arguments}]")
@ValueSource(strings = { "0, 1, 2, 3", "5, 4, 3, 2, 1", "8, 3, 5, 7, 4, 3, 12, 12, 1" })
@ValueSource(strings = {
"0, 1, 2, 3", "5, 4, 3, 2, 1", "8, 3, 5, 7, 4, 3, 12, 12, 1"
})
public void testToString(String inputs) {
java.util.ArrayDeque<String> reference = new java.util.ArrayDeque<String>();
edu.caltech.cs2.datastructures.ArrayDeque<String> me = new edu.caltech.cs2.datastructures.ArrayDeque<>();
......@@ -142,6 +161,7 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("addFront() and removeFront() take linear time")
@Timeout(value = 20, unit = SECONDS)
@Test()
public void testFrontDequeOperationComplexity() {
Function<Integer, IDeque<Integer>> provide = (Integer numElements) -> {
......@@ -155,12 +175,12 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
Consumer<IDeque<Integer>> removeFront = (IDeque<Integer> q) -> q.removeFront();
RuntimeInstrumentation.assertAtMost("addFront", RuntimeInstrumentation.ComplexityType.LINEAR, provide, addFront, 8);
RuntimeInstrumentation.assertAtMost("removeFront", RuntimeInstrumentation.ComplexityType.LINEAR, provide,
removeFront, 8);
RuntimeInstrumentation.assertAtMost("removeFront", RuntimeInstrumentation.ComplexityType.LINEAR, provide, removeFront, 8);
}
@Order(complexityTestLevel)
@DisplayName("addBack() and removeBack() take linear time")
@Timeout(value = 20, unit = SECONDS)
@Test
public void testBackDequeOperationComplexity() {
Function<Integer, IDeque<Integer>> provide = (Integer numElements) -> {
......@@ -174,12 +194,12 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
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("removeBack", RuntimeInstrumentation.ComplexityType.LINEAR, provide, removeBack, 8);
}
@Order(complexityTestLevel)
@DisplayName("enqueue() and dequeue() take linear time")
@Timeout(value = 20, unit = SECONDS)
@Test
public void testQueueOperationComplexity() {
Function<Integer, IQueue<Integer>> provide = (Integer numElements) -> {
......@@ -198,6 +218,7 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("push() and pop() take constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testStackOperationComplexity() {
Function<Integer, IStack<Integer>> provide = (Integer numElements) -> {
......@@ -216,6 +237,7 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("peek() takes constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testPeekComplexity() {
Function<Integer, IStack<Integer>> provide = (Integer numElements) -> {
......@@ -232,6 +254,7 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("peekFront() takes constant time")
@Timeout(value = 10, unit = SECONDS)
@Test()
public void testPeekFrontComplexity() {
Function<Integer, IDeque<Integer>> provide = (Integer numElements) -> {
......@@ -243,12 +266,12 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
};
Consumer<IDeque<Integer>> peekFront = (IDeque<Integer> q) -> q.peekFront();
RuntimeInstrumentation.assertAtMost("peekFront", RuntimeInstrumentation.ComplexityType.CONSTANT, provide, peekFront,
8);
RuntimeInstrumentation.assertAtMost("peekFront", RuntimeInstrumentation.ComplexityType.CONSTANT, provide, peekFront, 8);
}
@Order(complexityTestLevel)
@DisplayName("peekBack() takes constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testPeekBackComplexity() {
Function<Integer, IDeque<Integer>> provide = (Integer numElements) -> {
......@@ -260,8 +283,7 @@ public class ArrayDequeTests implements DequeTests, StackTests, QueueTests {
};
Consumer<IDeque<Integer>> peekBack = (IDeque<Integer> q) -> q.peekBack();
RuntimeInstrumentation.assertAtMost("peekBack", RuntimeInstrumentation.ComplexityType.CONSTANT, provide, peekBack,
8);
RuntimeInstrumentation.assertAtMost("peekBack", RuntimeInstrumentation.ComplexityType.CONSTANT, provide, peekBack, 8);
}
}
\ No newline at end of file
......@@ -5,7 +5,6 @@ import edu.caltech.cs2.helpers.Reflection;
import edu.caltech.cs2.helpers.RuntimeInstrumentation;
import edu.caltech.cs2.interfaces.IFixedSizeQueue;
import edu.caltech.cs2.interfaces.IQueue;
import org.hamcrest.collection.IsIterableContainingInOrder;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
......@@ -17,6 +16,7 @@ import java.util.function.Consumer;
import java.util.function.Function;
import static edu.caltech.cs2.project03.Project03TestOrdering.*;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.junit.jupiter.api.Assertions.*;
@Tag("B")
......@@ -129,6 +129,7 @@ public class CircularArrayFixedSizeQueueTests implements FixedSizeQueueTests {
@Order(complexityTestLevel)
@DisplayName("enqueue() and dequeue() take constant time")
@Timeout(value = 10, unit = SECONDS)
@Test()
public void testQueueOperationComplexity() {
Function<Integer, IFixedSizeQueue<Integer>> provide = (Integer numElements) -> {
......@@ -148,6 +149,7 @@ public class CircularArrayFixedSizeQueueTests implements FixedSizeQueueTests {
@Order(complexityTestLevel)
@DisplayName("peek() takes constant time")
@Timeout(value = 10, unit = SECONDS)
@Test()
public void testPeekComplexity() {
Function<Integer, IFixedSizeQueue<Integer>> provide = (Integer numElements) -> {
......@@ -164,8 +166,8 @@ public class CircularArrayFixedSizeQueueTests implements FixedSizeQueueTests {
}
@Order(fixedSizeQueueLevel)
@DisplayName("Test iterator matches reference")
@ParameterizedTest(name = "Test iterator with {1} random values with seed = {0} and fixed array size = {2}")
@DisplayName("Test iterator matches reference for wraparound values")
@ParameterizedTest(name = "Test iterator and wraparound behavior 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);
......@@ -188,5 +190,5 @@ public class CircularArrayFixedSizeQueueTests implements FixedSizeQueueTests {
assertIterableEquals(reference, me, "Reference and implemented queues are not equal");
}
}
}
......@@ -21,6 +21,7 @@ import java.util.function.Consumer;
import java.util.function.Function;
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.assertNull;
......@@ -152,6 +153,7 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("addFront() and removeFront() take constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testFrontDequeOperationComplexity() {
Function<Integer, IDeque<Integer>> provide = (Integer numElements) -> {
......@@ -172,6 +174,7 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("addBack() and removeBack() take constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testBackDequeOperationComplexity() {
Function<Integer, IDeque<Integer>> provide = (Integer numElements) -> {
......@@ -191,6 +194,7 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("enqueue() and dequeue() take constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testQueueOperationComplexity() {
Function<Integer, IQueue<Integer>> provide = (Integer numElements) -> {
......@@ -209,6 +213,7 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("push() and pop() take constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testStackOperationComplexity() {
Function<Integer, IStack<Integer>> provide = (Integer numElements) -> {
......@@ -227,6 +232,7 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("peek() takes constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testPeekComplexity() {
Function<Integer, IStack<Integer>> provide = (Integer numElements) -> {
......@@ -243,6 +249,7 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("peekFront() takes constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testPeekFrontComplexity() {
Function<Integer, IDeque<Integer>> provide = (Integer numElements) -> {
......@@ -260,6 +267,7 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
@Order(complexityTestLevel)
@DisplayName("peekBack() takes constant time")
@Timeout(value = 10, unit = SECONDS)
@Test
public void testPeekBackComplexity() {
Function<Integer, IDeque<Integer>> provide = (Integer numElements) -> {
......@@ -276,8 +284,8 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
}
@Order(dequeTestLevel)
@DisplayName("Cycle detection for addFront(...) and addBack(...)")
@ParameterizedTest(name = "Test cycles {1} random numbers with seed = {0}")
@DisplayName("Cycle detection for addFront(...), addBack(...), removeFront(...), and removeBack(...)")
@ParameterizedTest(name = "Test cycles - {1} random numbers with seed = {0}")
@CsvSource({ "69, 2000", "20, 3000" })
public void checkForCycles(int seed, int size) {
Random r = new Random(seed);
......@@ -311,8 +319,8 @@ public class LinkedDequeTests implements DequeTests, StackTests, QueueTests {
}
@Order(dequeTestLevel)
@DisplayName("Check reverses for addFront(...) and addBack(...)")
@ParameterizedTest(name = "Test reverse {1} random numbers with seed = {0}")
@DisplayName("Check reverses for addFront(...), addBack(...), removeFront(...), and removeBack(...)")
@ParameterizedTest(name = "Test reverse - {1} random numbers with seed = {0}")
@CsvSource({ "31, 2000", "64, 3000" })
public void checkReverses(int seed, int size) {
Random r = new Random(seed);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment