Created
September 2, 2016 08:01
-
-
Save loafalkman/d673e08b09180d92df9b964c136209e4 to your computer and use it in GitHub Desktop.
TIll Felix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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