// testHeap.cc   P. Conrad CISC220 06J
// test-driven development for a min-heap class

#include <iostream>
#include <cassert>
using namespace std;

#include "runTests.h"

#include "heap.h"

void printHeader(int line)
{
  cout << "\n\n*** Block of tests from line: " << line << " ***" << endl; 
}


int main(void)
{

  RunTests_C test;
  Heap_C a;  // invokes default constructor

  printHeader(__LINE__);
  test.assertEquals(a.isEmpty(),true);
  test.assertEquals(a.isFull(),false);


  printHeader(__LINE__);
  a.add(3);
  test.assertEquals(a.isEmpty(),false);
  test.assertEquals(a.deleteMin(),3);
  test.assertEquals(a.isEmpty(),true);

  printHeader(__LINE__);
  a.add(3);
  a.add(2);
  test.assertEquals(a.isEmpty(),false);
  test.assertEquals(a.deleteMin(),2);
  test.assertEquals(a.deleteMin(),3);
  test.assertEquals(a.isEmpty(),true);

  printHeader(__LINE__);
  a.add(2);
  a.add(3);
  test.assertEquals(a.isEmpty(),false);
  test.assertEquals(a.deleteMin(),2);
  test.assertEquals(a.deleteMin(),3);
  test.assertEquals(a.isEmpty(),true);

  printHeader(__LINE__);
  a.add(2);
  a.add(1);
  a.add(3);
  cout << "a=" << a << endl;
  test.assertEquals(a.isEmpty(),false);
  test.assertEquals(a.deleteMin(),1);
  cout << "after deleteMin on 1, a=" << a << endl;
  test.assertEquals(a.deleteMin(),2);
  test.assertEquals(a.deleteMin(),3);
  test.assertEquals(a.isEmpty(),true);

  printHeader(__LINE__);
  a.add(2);
  a.add(1);
  a.add(2);
  a.add(3);
  test.assertEquals(a.isEmpty(),false);
  test.assertEquals(a.deleteMin(),1);
  test.assertEquals(a.deleteMin(),2);
  test.assertEquals(a.deleteMin(),2);
  test.assertEquals(a.deleteMin(),3);
  test.assertEquals(a.isEmpty(),true);

  printHeader(__LINE__);
  a.add(100);
  a.add(1);
  a.add(2);
  test.assertEquals(a.deleteMin(),1);
  a.add(62);
  a.add(12);
  a.add(2);
  a.add(13);
  test.assertEquals(a.isEmpty(),false); 
  test.assertEquals(a.deleteMin(),2);
  test.assertEquals(a.deleteMin(),2);
  test.assertEquals(a.deleteMin(),12);
  test.assertEquals(a.deleteMin(),13);
  test.assertEquals(a.deleteMin(),62);
  test.assertEquals(a.deleteMin(),100);
  test.assertEquals(a.isEmpty(),true);

  printHeader(__LINE__);
  a.testPrivateMemberFunctions(test);
  
  test.print();
  test.finish();

}





