import java.util.Arrays;

import junit.framework.TestCase;

public class SortingStuffTest extends TestCase{
	public void testBubble1(){
		int[] arr = {5};
		int[] ans = {5};
		assertFalse(SortingStuff.bubble(arr));
		assertEquals(Arrays.toString(ans), Arrays.toString(arr));
		
	}
	public void testBubble2(){
		int[] arr = {5, 1, 2, 3, 4};
		int[] ans = {1, 2, 3, 4, 5};
		assertTrue(SortingStuff.bubble(arr));
		assertEquals(Arrays.toString(ans), Arrays.toString(arr));
		
	}
	public void testBubble3(){
		int[] arr = {5, 3, 2, 1, 4};
		int[] ans = {3, 2, 1, 4, 5};
		assertTrue(SortingStuff.bubble(arr));
		assertEquals(Arrays.toString(ans), Arrays.toString(arr));
		
	}

	public void testInsert1(){
		int[] arr = {1, 3};
		int[] ans = {1, 3};
		SortingStuff.insert(arr, 1);
		assertEquals(Arrays.toString(ans), Arrays.toString(arr));		
	}
	public void testInsert2(){
		int[] arr = {3, 1};
		int[] ans = {1, 3};
		SortingStuff.insert(arr, 1);
		assertEquals(Arrays.toString(ans), Arrays.toString(arr));		
	}
	public void testInsert3(){
		int[] arr = {1, 3, 4, 2, 0};
		int[] ans = {1, 2, 3, 4, 0};
		SortingStuff.insert(arr, 3);
		assertEquals(Arrays.toString(ans), Arrays.toString(arr));		
	}
	public void testMinIndex1(){
		int[] arr = {1, 2, 3, 8, 7, 4, 6, 5};
		assertTrue(SortingStuff.minIndex(arr, 3)== 5);
	}
	public void testMinIndex2(){
		int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
		assertTrue(SortingStuff.minIndex(arr, 8)== 8);
	}
	public void testMinIndex3(){
		int[] arr =  {1, 2, 3, 8, 7, 4, 6, 5};
		assertTrue(SortingStuff.minIndex(arr, 0)== 0);
	}
	public void testMinIndex4(){
		int[] arr = {1, 2, 3, 4, 7, 8, 6, 5};
		assertTrue(SortingStuff.minIndex(arr, 4)== 7);
	}

	public void testBubbleSort1(){
		int[] arr = {1};
		SortingStuff.bubbleSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testBubbleSort2(){
		int[] arr = {3, 2, 1};
		SortingStuff.bubbleSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testBubbleSort3(){
		int[] arr = {1, 4, 2, 3};
		SortingStuff.bubbleSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testBubbleSort4(){
		int[] arr = {10, 6, 15, 4, 1, 11, 7, 1, 14, 9, 9, 2, 5, 3, 13, 8};
		SortingStuff.bubbleSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}

	public void testInsertionSort1(){
		int[] arr = {1};
		SortingStuff.insertionSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testInsertionSort2(){
		int[] arr = {3, 2, 1};
		SortingStuff.insertionSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testInsertionSort3(){
		int[] arr = {1, 4, 2, 3};
		SortingStuff.insertionSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testInsertionSort4(){
		int[] arr = {10, 6, 15, 4, 1, 11, 7, 1, 14, 9, 9, 2, 5, 3, 13, 8};
		SortingStuff.insertionSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testSelectionSort1(){
		int[] arr = {1};
		SortingStuff.selectionSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testSelectionSort2(){
		int[] arr = {3, 2, 1};
		SortingStuff.selectionSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testSelectionSort3(){
		int[] arr = {1, 4, 2, 3};
		SortingStuff.selectionSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	public void testSelectionSort4(){
		int[] arr = {10, 6, 15, 4, 1, 11, 7, 1, 14, 9, 9, 2, 5, 3, 13, 8};
		SortingStuff.selectionSort(arr);
		assertTrue(SortingStuff.isSorted(arr));
	}
	
}
