import java.util.Stack;
import java.util.Random;
import static org.junit.Assert.*;
public class ArrayStackTest {
private Stack stack;
private ArrayStack array;
public void produce_data() {
Random random = new Random();
int rand_len_push = random.nextInt(Integer.MAX_VALUE);
stack = new Stack<>();
array = new ArrayStack<>(rand_len_push);
System.out.println(String.format("rand_len is %d", rand_len_push));
for (int i = 0; i < rand_len_push-5; i++) {
int rand_num = random.nextInt(Integer.MAX_VALUE);
stack.push(rand_num);
array.push(rand_num);
}
for (int i = 0; i < rand_len_push-10; i++) {
int rand_num = random.nextInt(Integer.MAX_VALUE);
stack.push(rand_num);
array.push(rand_num);
}
}
@Test
public void getSize() {
for (int i = 0; i < 10000; i++) {
produce_data();
Assert.assertEquals(stack.size(), array.getSize());
}
}
@Test
public void getCapacity() {
for (int i = 0; i < 10000; i++) {
produce_data();
Assert.assertEquals(stack.capacity(), array.getCapacity());
}
}
@Test
public void isEmpty() {
for (int i = 0; i < 10000; i++) {
produce_data();
Assert.assertEquals(stack.empty(), array.isEmpty());
}
}
@Test
public void push() {
Random random = new Random();
for (int i = 0; i < 10000; i++) {
produce_data();
int rand_time = random.nextInt(Integer.MAX_VALUE);
for (int j = 0; j < rand_time ; j++) {
int rand_num = random.nextInt(Integer.MAX_VALUE);
stack.push(rand_num);
array.push(rand_num);
}
Assert.assertEquals(stack.peek(), array.peek());
}
}
@Test
public void pop() {
Random random = new Random();
for (int i = 0; i < 10000; i++) {
produce_data();
int rand_time = random.nextInt(Integer.MAX_VALUE);
for (int j = 0; j < stack.size()-rand_time; j++) {
stack.pop();
array.pop();
}
stack.pop();
array.pop();
Assert.assertEquals(stack.peek(), array.peek());
}
}
}