
/**
 * HeapTester  
 */

public class HeapTester
{

    public static void outputHeap(int[] a) {
        for (int i=0; i< a.length; i++)
        {

            System.out.print(a[i] + ", ");
        }
        System.out.println();
    }
    public static void main(String[] args) {

        int isHeapAfterInsertError = 0;
        int isHeapAfterDelete_MinError = 0;      
        int Get_MinError = 0;
        int heapsize = 0;

        int[] a = new int[30];
        int minVal = -1;

        System.out.println("Insert 5" );
        Heap.Insert(a,heapsize,5);
        heapsize++;

        outputHeap(a);

        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterInsertError++;
            System.out.println("isHeapAfterInsertError");
        }
        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 5)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 5");
        }

        System.out.println("Insert 8" );
        Heap.Insert(a,heapsize,8);
        heapsize++;

        outputHeap(a);

        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterInsertError++;
            System.out.println("isHeapAfterInsertError");
        }

        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 5)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 5");
        }

        System.out.println("Delete_Min" );
        Heap.Delete_Min(a,heapsize);     
        heapsize--;

        outputHeap(a);

        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterDelete_MinError++;
            System.out.println("isHeapAfterDelete_MinError");

        }

        System.out.println("Insert 5" );
        Heap.Insert(a,heapsize,5);
        heapsize++;

        outputHeap(a);

        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterInsertError++;
            System.out.println("isHeapAfterInsertError");
        }

        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 5)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 5");
        }

        System.out.println("Insert 1" );
        Heap.Insert(a,heapsize,1);
        heapsize++;

        outputHeap(a);

        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterInsertError++;
            System.out.println("isHeapAfterInsertError");
        }

        System.out.println("Insert 7" );
        Heap.Insert(a,heapsize,7);
        heapsize++;

        outputHeap(a);

        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterInsertError++;
            System.out.println("isHeapAfterInsertError");
        }

        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 1)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 1");
        }

        System.out.println("Delete_Min" );
        Heap.Delete_Min(a,heapsize);     
        heapsize--;

        outputHeap(a);

        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterDelete_MinError++;
            System.out.println("isHeapAfterDelete_MinError");

        }
        System.out.println("Insert 2" );
        Heap.Insert(a,heapsize,2);
        heapsize++;

        outputHeap(a);
        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterInsertError++;
            System.out.println("isHeapAfterInsertError");
        }

        System.out.println("Insert 5" );
        Heap.Insert(a,heapsize,5);
        heapsize++;
        outputHeap(a);

        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterInsertError++;
            System.out.println("isHeapAfterInsertError");
        }

        System.out.println("Insert 9" );
        Heap.Insert(a,heapsize,9);
        heapsize++;

        outputHeap(a);
        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterInsertError++;
            System.out.println("isHeapAfterInsertError");
        }
        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 2)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 2");
        }

        System.out.println("Delete_Min" );
        Heap.Delete_Min(a,heapsize);     
        heapsize--;

        outputHeap(a);
        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterDelete_MinError++;
            System.out.println("isHeapAfterDelete_MinError");

        }

        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 5)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 5");
        }

        System.out.println("Delete_Min" );
        Heap.Delete_Min(a,heapsize);     
        heapsize--;

        outputHeap(a);
        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterDelete_MinError++;
            System.out.println("isHeapAfterDelete_MinError");

        }

        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 5)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 5");
        }

        System.out.println("Delete_Min" );
        Heap.Delete_Min(a,heapsize);     
        heapsize--;

        outputHeap(a);
        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterDelete_MinError++;
            System.out.println("isHeapAfterDelete_MinError");

        }
        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 7)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 7");
        }

        System.out.println("Delete_Min" );
        Heap.Delete_Min(a,heapsize);     
        heapsize--;

        outputHeap(a);
        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterDelete_MinError++;
            System.out.println("isHeapAfterDelete_MinError");

        }
        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 8)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 8");
        }

        System.out.println("Delete_Min" );
        Heap.Delete_Min(a,heapsize);     
        heapsize--;

        outputHeap(a);
        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterDelete_MinError++;
            System.out.println("isHeapAfterDelete_MinError");

        }
        minVal = Heap.Get_Min(a,heapsize);
        if ( minVal != 9)
        {
            Get_MinError++;
            System.out.println("Get_MinError: Get_Min returns " + minVal + " instead of 9");
        }

        System.out.println("Delete_Min" );
        Heap.Delete_Min(a,heapsize);     
        heapsize--;

        outputHeap(a);
        if (Heap.isHeap(a,heapsize) != true )
        {
            isHeapAfterDelete_MinError++;
            System.out.println("isHeapAfterDelete_MinError");

        }


        if (isHeapAfterInsertError > 0)
        {
            System.out.println("Num of isHeap fails after Insert = " + isHeapAfterInsertError);
        }
        if (isHeapAfterDelete_MinError > 0)
        {
            System.out.println("Num of isHeap fails after Delete_Min = " + isHeapAfterDelete_MinError);
        }
        if (Get_MinError > 0)
        {
            System.out.println("Num of Get_Min fails = " + Get_MinError);
        }


        System.out.println("End of tests");
    }

}

