import static org.junit.jupiter.api.Assertions.*;
import java.util.Deque;
import org.junit.jupiter.api.Test;

public class TestLinkedDeque {

  @Test
  public void testOfferFirst() {
    Deque<Integer> deque = new LinkedDeque<>();
    deque.offerFirst(261);
    assertEquals(1, deque.size()); // expected, actual
    deque.offerFirst(240);
    assertEquals(2, deque.size()); // expected, actual
    deque.offerFirst(227);
    assertEquals(3, deque.size()); // expected, actual

    assertEquals("[227, 240, 261]", deque.toString()); // expected, actual
  }

  @Test
  public void testOfferLast() {
    Deque<Integer> deque = new LinkedDeque<>();

    deque.offerLast(149);
    assertEquals(1, deque.size()); // expected, actual
    deque.offerLast(159);
    assertEquals(2, deque.size()); // expected, actual
    deque.offerLast(240);
    assertEquals(3, deque.size()); // expected, actual

    assertEquals("[149, 159, 240]", deque.toString()); // expected, actual
  }

  @Test
  public void testPollFirst() {
    Deque<Integer> deque = new LinkedDeque<>();

    deque.offerFirst(240);
    deque.offerFirst(159);
    deque.offerFirst(149);

    // TODO Write assertions to test multiple calls to pollFirst()
  }

  @Test
  public void testPollLast() {
    Deque<Integer> deque = new LinkedDeque<>();

    deque.offerLast(240);
    deque.offerLast(159);
    deque.offerLast(149);

    // TODO Write assertions to test multiple calls to pollLast()
  }

  @Test
  public void testIterator() {
    Deque<Integer> deque = new LinkedDeque<>();

    // TODO Write a test for iterator() usage and remove() method
  }

  // TODO Write additional test methods.
}
