// Path: test/com/google/java/contract/examples/ArrayListStack.java
// @Invariant("elements != null")
// public class ArrayListStack<T> implements Stack<T> {
//   protected ArrayList<T> elements;
// 
//   public ArrayListStack() {
//     elements = new ArrayList<T>();
//   }
// 
//   @Override
//   public int size() {
//     return elements.size();
//   }
// 
//   @Override
//   public T peek() {
//     return elements.get(elements.size() - 1);
//   }
// 
//   @Override
//   public T pop() {
//     return elements.remove(elements.size() - 1);
//   }
// 
//   @Override
//   @Ensures("elements.contains(old (obj))")
//   public void push(T obj) {
//     elements.add(obj);
//   }
// }
// 
// Path: test/com/google/java/contract/examples/Stack.java
// @Invariant("size() >= 0")
// public interface Stack<T> {
//   /**
//    * Returns the number of elements in this stack.
//    */
//   public int size();
// 
//   /**
//    * Returns the topmost element of this stack without removing it.
//    */
//   @Requires("size() >= 1")
//   public T peek();
// 
//   /**
//    * Pops the topmost element off this stack.
//    */
//   @Requires("size() >= 1")
//   @Ensures({
//     "size() == old (size()) - 1",
//     "result == old (peek())"
//   })
//   public T pop();
// 
//   /**
//    * Pushes an element onto the stack.
//    */
//   @Ensures({
//     "size() == old (size()) + 1",
//     "peek() == old (obj)"
//   })
//   public void push(T obj);
// }


import com.google.java.contract.InvariantError;
import com.google.java.contract.PostconditionError;
import com.google.java.contract.PreconditionError;
import com.google.java.contract.examples.ArrayListStack;
import com.google.java.contract.examples.Stack;
import junit.framework.TestCase;
  /**
   * A stack implementation that simply stores the last element. This
   * implementation suffices to fool our contracts.
   */
  public static class BogusLastElementStack<T>
      extends BogusCountingStack<T> {
    protected T lastElement;

    @Override
    public T peek() {
      return lastElement;
    }

    @Override
    public T pop() {
      --count;
      return lastElement;
    }

    @Override
    public void push(T obj) {
      ++count;
      lastElement = obj;
    }
  }

  private Stack<Integer> stack;

  @Override
  public void setUp() {
// Path: test/com/google/java/contract/examples/ArrayListStack.java
// @Invariant("elements != null")
// public class ArrayListStack<T> implements Stack<T> {
//   protected ArrayList<T> elements;
// 
//   public ArrayListStack() {
//     elements = new ArrayList<T>();
//   }
// 
//   @Override
//   public int size() {
//     return elements.size();
//   }
// 
//   @Override
//   public T peek() {
//     return elements.get(elements.size() - 1);
//   }
// 
//   @Override
//   public T pop() {
//     return elements.remove(elements.size() - 1);
//   }
// 
//   @Override
//   @Ensures("elements.contains(old (obj))")
//   public void push(T obj) {
//     elements.add(obj);
//   }
// }
// 
// Path: test/com/google/java/contract/examples/Stack.java
// @Invariant("size() >= 0")
// public interface Stack<T> {
//   /**
//    * Returns the number of elements in this stack.
//    */
//   public int size();
// 
//   /**
//    * Returns the topmost element of this stack without removing it.
//    */
//   @Requires("size() >= 1")
//   public T peek();
// 
//   /**
//    * Pops the topmost element off this stack.
//    */
//   @Requires("size() >= 1")
//   @Ensures({
//     "size() == old (size()) - 1",
//     "result == old (peek())"
//   })
//   public T pop();
// 
//   /**
//    * Pushes an element onto the stack.
//    */
//   @Ensures({
//     "size() == old (size()) + 1",
//     "peek() == old (obj)"
//   })
//   public void push(T obj);
// }


// Path: test/com/google/java/contract/tests/StackTest.java
import com.google.java.contract.InvariantError;
import com.google.java.contract.PostconditionError;
import com.google.java.contract.PreconditionError;
import com.google.java.contract.examples.ArrayListStack;
import com.google.java.contract.examples.Stack;
import junit.framework.TestCase;

  /**
   * A stack implementation that simply stores the last element. This
   * implementation suffices to fool our contracts.
   */
  public static class BogusLastElementStack<T>
      extends BogusCountingStack<T> {
    protected T lastElement;

    @Override
    public T peek() {
      return lastElement;
    }

    @Override
    public T pop() {
      --count;
      return lastElement;
    }

    @Override
    public void push(T obj) {
      ++count;
      lastElement = obj;
    }
  }

  private Stack<Integer> stack;

  @Override
  public void setUp() {
    stack = new ArrayListStack<Integer>();