Skip to content

Instantly share code, notes, and snippets.

@loafalkman
Created September 2, 2016 08:01
Show Gist options
  • Save loafalkman/d673e08b09180d92df9b964c136209e4 to your computer and use it in GitHub Desktop.
Save loafalkman/d673e08b09180d92df9b964c136209e4 to your computer and use it in GitHub Desktop.
TIll Felix
package se.annika.stack;
import java.util.ArrayList;
public class Stack {
private ArrayList<Integer> mainStack, undoStack;
private Integer mainStackPointer, undoStackPointer;
public Stack() {
mainStack = new ArrayList<>();
undoStack = new ArrayList<>();
mainStackPointer = mainStack.size() -1;
undoStackPointer = undoStack.size() -1;
}
public void push(Integer i) {
mainStack.add(i);
mainStackPointer ++;
}
public void pop() {
pushUndoStack(mainStack.get(mainStackPointer));
mainStack.remove((int) mainStackPointer);
mainStackPointer --;
}
private void pushUndoStack(Integer removed) {
undoStackPointer ++;
undoStack.add(removed);
}
public void redo() {
push(undoStack.get(undoStackPointer));
undoStackPointer --;
}
public ArrayList<Integer> getMainStack() {
return this.mainStack;
}
public Integer getLastRemoval() {
return undoStack.get(undoStackPointer);
}
public Integer getMainStackPointer() {
return this.mainStackPointer;
}
}
package se.annika.stackTests;
import org.junit.*;
import static org.junit.Assert.*;
import se.annika.stack.*;
import java.util.ArrayList;
public class StackTest {
private static final Integer NUMBER_BIG_ENOUGH = 1000;
private Stack stack;
@Before
public void stackSetup() {
stack = new Stack();
}
public void stackFiller(Integer numberOfIntegers) {
for (int i = 1; i <= numberOfIntegers; i++) {
Integer randomInteger = (int) (Math.random() * NUMBER_BIG_ENOUGH + 1);
stack.push(randomInteger);
}
}
@Test
public void stackSetUpOK() {
assertEquals(new ArrayList<Integer>(), stack.getMainStack());
}
@Test
public void addInteger() {
Integer previousStackSize = stack.getMainStack().size();
stackFiller(1);
assertEquals(stack.getMainStack().size(), previousStackSize + 1);
}
@Test
public void removeInteger() {
stackFiller(1);
Integer previousStackSize = stack.getMainStack().size();
stack.pop();
assertEquals(stack.getMainStack().size(), previousStackSize - 1);
}
@Test(expected = ArrayIndexOutOfBoundsException.class)
public void removeIntegerFromEmptyList() {
Integer previousStackSize = stack.getMainStack().size();
stack.pop();
assertEquals(stack.getMainStack().size(), previousStackSize - 1);
}
@Test
public void undoStackOK() {
stackFiller(1);
Integer integerAdded = stack.getMainStack().get(0);
stack.pop();
assertEquals(integerAdded, stack.getLastRemoval());
}
@Test
public void redoStackOK() {
stackFiller(1);
Integer integerAdded = stack.getMainStack().get(0);
stack.pop();
stack.redo();
assertEquals(integerAdded, stack.getMainStack().get(stack.getMainStackPointer()));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment