import static org.junit.Assert.*;

import org.junit.Test;


public class TwistListTest {

  @Test
	public void testAdd() {
		TwistList<String> l1 = new TwistList<>();
		l1.add("D");
		l1.add("C");
		l1.add("B");
		l1.add("A");
		assertEquals(l1.get(0), "A");
		assertEquals(l1.get(1), "B");
		assertEquals(l1.get(2), "C");
		assertEquals(l1.get(3), "D");
	}
	
	@Test
	public void testAdd2() {
		TwistList<String> l1 = new TwistList<>();
		l1.add("D");
		l1.add("C");
		l1.add("B");
		l1.add("A");
		l1.add("C");
		assertEquals(l1.get(0), "A");
		assertEquals(l1.get(1), "B");
		assertEquals(l1.get(2), "C");
		assertEquals(l1.get(3), "C");
		assertEquals(l1.get(4), "D");
	}
	
	@Test
	public void reverseTest() {
		TwistList<String> l1 = new TwistList<>();
		l1.add("D");
		l1.add("C");
		l1.add("B");
		l1.add("A");
		l1.add("C");
		l1.reverse(0, 3);
	}
	
	@Test
	public void reverseTest2() {
		TwistList<String> l1 = new TwistList<>();
		l1.add("D");
		l1.reverse(0, 0);
	}
	
	@Test
	public void reverseTest3() {
		TwistList<String> l1 = new TwistList<>();
		l1.add("A");
		l1.add("A");
		l1.reverse(0, 1);
	}
	
	@Test(expected=IndexOutOfBoundsException.class)
	public void reverseTest4() {
		TwistList<String> l1 = new TwistList<>();
		l1.add("A");
		l1.add("A");
		l1.reverse(0, 2);
	}
	

	@Test
	public void flipflopTest() {
		TwistList<Integer> l1 = new TwistList<>();
		l1.add(5);
		l1.add(4);
		l1.add(3);
		l1.add(6);
		l1.add(2);
		l1.flipFlop(1);
		// 45623
	}
	
	@Test
	public void flipflopTest2() {
		TwistList<Integer> l1 = new TwistList<>();
		l1.add(1);
		l1.add(2);
		l1.flipFlop(0);
		// 21
	}
	
	@Test
	public void swingTest() {
		TwistList<Integer> l1 = new TwistList<>();
		l1.add(1);
		l1.add(2);
		l1.add(3);
		l1.add(4);
//		l1.printList();
		l1.swing(1);
//		l1.printList();
		// 1234 -> 2143
	}
	
	@Test
	public void swingTest2() {
		TwistList<Integer> l1 = new TwistList<>();
		l1.add(1);
		l1.add(2);
		l1.add(3);
		l1.add(4);
//		l1.printList();
		l1.swing(1);
//		l1.printList();
		// 1234 -> 2143
	}
}