import java.io.PrintStream;
import java.lang.Comparable;
import java.lang.Object;
import java.lang.String;

/**
 * The test class SinglyLinkedListTest.
 */
public class SinglyLinkedListTest extends junit.framework.TestCase
{
	public void testAddLast()
	{
	    SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addLast(new Integer(2));
		singlyLi2.addLast(new Integer(4));
		singlyLi2.addLast(new Integer(6));
		assertEquals(singlyLi2.getLast(),new Integer(6));
		assertEquals(new Integer(2), singlyLi2.getFirst());
	}
	/*
	public void testInOrderInsert()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.inOrderInsert(new Integer(1));
		singlyLi2.inOrderInsert(new Integer(7));
		singlyLi2.inOrderInsert(new Integer(10));
		singlyLi2.inOrderInsert(new Integer(11));
		singlyLi2.inOrderInsert(new Integer(5));
		assertEquals("[1, 2, 5, 7, 10, 11]", singlyLi2.toString());
	}
	*/
	
	public void testInOrderInsertLast()
    {
        SinglyLinkedList singlyLi2 = new SinglyLinkedList();
        singlyLi2.addFirst(new Integer(5));
        singlyLi2.addFirst(new Integer(4));
        singlyLi2.addFirst(new Integer(2));
        singlyLi2.addFirst(new Integer(1));
        singlyLi2.inOrderInsert(new Integer(6));
        assertEquals(new Integer(6), singlyLi2.getLast());
    }
    public void testInOrderInsertFirst()
    {
        SinglyLinkedList singlyLi2 = new SinglyLinkedList();
        singlyLi2.addFirst(new Integer(5));
        singlyLi2.addFirst(new Integer(4));
        singlyLi2.addFirst(new Integer(2));
        singlyLi2.addFirst(new Integer(1));
        singlyLi2.inOrderInsert(new Integer(0));
        assertEquals(new Integer(0), singlyLi2.getFirst());
    }
    public void testInOrderInsertMiddle()
    {
        SinglyLinkedList singlyLi2 = new SinglyLinkedList();
        singlyLi2.addFirst(new Integer(5));
        singlyLi2.addFirst(new Integer(4));
        singlyLi2.addFirst(new Integer(2));
        singlyLi2.addFirst(new Integer(1));
        singlyLi2.inOrderInsert(new Integer(3));
        singlyLi2.removeFirst();
        singlyLi2.removeFirst();
        assertEquals(new Integer(3), singlyLi2.getFirst());
    }
    public void testInOrderInsertOnlyOne()
    {
        SinglyLinkedList singlyLi2 = new SinglyLinkedList();
        
        singlyLi2.inOrderInsert(new Integer(6));
        assertEquals(new Integer(6), singlyLi2.getLast());
    }
	
	/*
	public void testAddFirstLast()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(7));
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		assertEquals("[7, 1, 2, 10, 11, 5]", singlyLi2.toString());
	}
	*/
	public void testAddLastOne()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		
		singlyLi2.addLast(new Integer(5));
		assertEquals(new Integer(5), singlyLi2.getFirst());
	}
	public void testAddLastFirst()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		assertEquals(new Integer(10), singlyLi2.getFirst());
	}
	public void testAddLastLast()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		assertEquals(new Integer(5), singlyLi2.getLast());
	}
	public void testGetFirst()
	{
		SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(7));
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		assertEquals(new Integer(7), singlyLi2.getFirst());
	}
	public void testGetLast()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(7));
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		assertEquals(new Integer(5), singlyLi2.getLast());
	}
	public void testRemoveLast1()
	{
		SinglyLinkedList obj=new SinglyLinkedList();
		String problemMsg="Problem with: removeLast";
		obj.addFirst(new Integer(2));
		obj.addLast(new Integer(3));
		obj.removeLast();
		assertEquals(problemMsg, new Integer(2), obj.getFirst());
	}
	public void testRemoveLast2()
	{
		SinglyLinkedList obj=new SinglyLinkedList();
		String problemMsg="Problem with: removeLast2";
		obj.addFirst(new Integer(2));
		obj.addLast(new Integer(3));
		obj.addLast(new Integer(4));
		obj.removeLast();
		assertEquals(problemMsg, new Integer(2), obj.getFirst());
	}
	public void testRemoveFirst()
	{
		SinglyLinkedList obj=new SinglyLinkedList();
		String problemMsg="Problem with: removeFirst";
		obj.addFirst(new Integer(2));
		obj.addLast(new Integer(3));
		obj.removeFirst();
		assertEquals(problemMsg, new Integer(3), obj.getFirst());
	}
	public void testContains1()
	{
		SinglyLinkedList obj=new SinglyLinkedList();
		String problemMsg="Problem with: contains";
		java.lang.Object o=null;
		assertFalse(problemMsg, obj.contains(o));
	}

	public void testContains2()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(7));
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		assertEquals(true, singlyLi2.contains(new Integer(5)));
	}
	public void testContains3()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(7));
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		assertEquals(false, singlyLi2.contains(new Integer(33)));
	}
	/*
	public void testRemove1()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(7));
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		singlyLi2.remove(new Integer(10));
		assertEquals("[7, 1, 2, 11, 5]", singlyLi2.toString());
	}*/
	public void testRemove1()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.remove(new Integer(2));
		assertEquals(new Integer(1), singlyLi2.getFirst());
	}
	public void testRemove2()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.remove(new Integer(1));
		assertEquals(new Integer(2), singlyLi2.getFirst());
	}
	
	public void testRemove3()
	{
		SinglyLinkedList obj=new SinglyLinkedList();
		String problemMsg="Problem with: remove2";
		java.lang.Object elem=new Integer(2);
		assertFalse(problemMsg, obj.remove(elem));
	}
	public void testRemove4()
	{
		SinglyLinkedList obj=new SinglyLinkedList();
		String problemMsg="Problem with: remove2";
		java.lang.Object elem=new Integer(2);
		obj.addFirst(new Integer(2));
		assertTrue(problemMsg, obj.remove(elem));
	}
	/*public void testReverse1()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(7));
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		singlyLi2.reverse();
		assertEquals("[5, 11, 10, 2, 1, 7]", singlyLi2.toString());
	}
	*/
	
	public void testReverse1()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(0));
		singlyLi2.reverse();
		assertEquals(new Integer(2), singlyLi2.getFirst());
	}
	public void testReverse2()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(0));
		singlyLi2.reverse();
		assertEquals(new Integer(0), singlyLi2.getLast());
	}
	public void testReverse3()
	{
		SinglyLinkedList obj=new SinglyLinkedList();
		String problemMsg="Problem with: reverse2";
		obj.reverse();
		//no need to assert anything here - just want to make
      // sure reverse does nothing when given nothing and returns
      // without an Exception
	}
	public void testSize()
	{
	  SinglyLinkedList singlyLi2 = new SinglyLinkedList();
		singlyLi2.addFirst(new Integer(2));
		singlyLi2.addFirst(new Integer(1));
		singlyLi2.addFirst(new Integer(7));
		singlyLi2.addLast(new Integer(10));
		singlyLi2.addLast(new Integer(11));
		singlyLi2.addLast(new Integer(5));
		singlyLi2.reverse();
		assertEquals(6, singlyLi2.size());
	}

}


