Я пытаюсь протестировать класс с именем SharedStack , который работает с Node , который каждый раз, когда я вызываю методы push или pop, возвращает неизменный стек. Память распределяется между стеками (если я выполняю push, я возвращаю новый стек, на самом деле в новом стеке «только» есть topofStack, а другая часть используется совместно с оригиналом).
Как я могу проверить этот класс на ?
Это SharedStack :
public class SharedStack<E> implements Stack<E> {
private final Node<E> topOfStack;
private static class Node<E> {
private final E elem;
private final Node<E> next;
public Node(E elem, Node<E> next) {
this.elem = elem;
this.next = next;
}
public E getElem() {
return elem;
}
public Node<E> getNext() {
return next;
}
}
public SharedStack() {
topOfStack = null;
}
public SharedStack(Node<E> topOfStack) {
this.topOfStack = topOfStack;
}
@Override
public Stack<E> push(E elem) {
return new SharedStack<>(new Node<>(elem, topOfStack));
}
@Override
public Stack<E> pop() throws StackError {
if (isEmpty()) {
throw new StackError("No elements in the stack");
} else {
return new SharedStack<>(new Node<>(null, topOfStack.getNext()));
}
}
@Override
public E top() throws StackError {
if (isEmpty()) {
throw new StackError("No elements in the stack");
} else {
return this.topOfStack.elem;
}
}
@Override
public boolean isEmpty() {
if(this.topOfStack == null){
return true;
}else{
return false;
}
}
}
Я провел несколько тестов с , например:
@Test
public void SharedStackPop() throws StackError {
Stack<Integer> s2 = new SharedStack<>();
s2 = s2.push(7);
s2 = s2.pop();
assertEquals(null,s2.top());
}
Я пытался сделать так же, как и в случае с целочисленными значениями, но у меня возникла ошибка, что я не могу добавить какой-либо элемент в стек.