1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package edu.caltech.cs2.interfaces;
import edu.caltech.cs2.interfaces.IStack;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import java.util.Deque;
import java.util.Random;
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 IStackTests {
IStack<Object> newStack();
@Order(stackTestLevel)
@DisplayName("Stress test for push(...) and peek(...)")
@ParameterizedTest(name = "Test push()ing {1} random numbers with seed = {0}")
@CsvSource({
"99, 3000", "40, 5000"
})
default void stressTestPush(int seed, int size) {
Random r = new Random(seed);
Deque<Object> reference = new java.util.ArrayDeque<>();
IStack<Object> me = newStack();
// Test that first peek is null
assertNull(me.peek(), "empty peek should return null");
// Test adding values updates size and peek correctly
for (int i = 0; i < size; i++) {
int num = r.nextInt();
reference.push(num);
me.push(num);
assertEquals(reference.size(), me.size(), "size()s are not equal");
assertEquals(reference.peek(), me.peek(), "peeks should be the same");
}
}
@Order(stackTestLevel)
@DisplayName("Stress test for pop(...)")
@ParameterizedTest(name = "Test pop()ing {1} random numbers with seed = {0}")
@CsvSource({
"98, 3000", "39, 5000"
})
default void stressTestPop(int seed, int size) {
Random r = new Random(seed);
Deque<Object> reference = new java.util.ArrayDeque<>();
IStack<Object> me = newStack();
// Test that first pop is null
assertNull(me.pop(), "empty pop should return null");
for (int i = 0; i < size; i++) {
int num = r.nextInt();
reference.push(num);
me.push(num);
assertEquals(reference.peek(), me.peek(),"return values of peek()s are not equal");
if (r.nextBoolean()) {
assertEquals(reference.pop(), me.pop(),"return values of pop()s are not equal");
assertEquals(reference.peek(), me.peek(),"return values of peek()s are not equal");
}
assertEquals(reference.size(), me.size(), "size()s are not equal");
}
}
}