@Test
  public void popEmptyStackExceptionAfterMultiplePushPop() {

    stack.push(100);
    stack.push(200);
    stack.push(300);

    assertEquals(3, stack.size());

    assertEquals(300, stack.pop());
    assertEquals(2, stack.size());

    assertEquals(200, stack.pop());
    assertEquals(1, stack.size());

    assertEquals(100, stack.pop());
    assertEquals(0, stack.size());

    stack.push(999);
    assertEquals(1, stack.size());
    assertEquals(999, stack.pop());

    ex.expect(StackEmptyException.class);
    stack.pop();
  }
  @Test
  public void pushPopOneElement() {

    stack.push(100);
    assertEquals(1, stack.size());

    assertEquals(100, stack.pop());
    assertEquals(0, stack.size());
  }
  @Test
  public void pushPopTwoElements() {

    stack.push(100);
    stack.push(200);
    assertEquals(2, stack.size());

    assertEquals(200, stack.pop());
    assertEquals(1, stack.size());

    assertEquals(100, stack.pop());
  }
  @Test
  public void pushPopElementsMultipleTimes() {

    stack.push(300);
    stack.push(400);
    stack.push(500);
    stack.push(600);
    stack.push(700);
    assertEquals(5, stack.size());

    assertEquals(700, stack.pop());
    assertEquals(4, stack.size());

    assertEquals(600, stack.pop());
    assertEquals(3, stack.size());

    assertEquals(500, stack.pop());
    assertEquals(2, stack.size());

    assertEquals(400, stack.pop());
    assertEquals(1, stack.size());

    assertEquals(300, stack.pop());
    assertEquals(0, stack.size());

    stack.push(99);
    assertEquals(1, stack.size());
    assertEquals(99, stack.pop());
    assertEquals(0, stack.size());
  }
  @Test
  public void sizeAfterTwoElementsAdded() {
    stack.push(100);
    stack.push(200);

    assertEquals(2, stack.size());
  }
  @Test
  public void sizeAfterOneElementAdded() {

    stack.push(100);
    assertEquals(1, stack.size());
  }
  @Test
  public void sizeWhenNoElementAdded() {

    assertEquals(0, stack.size());
  }