// quadTest.cc  P. Conrad CISC181  06S

#include <iostream>
using std::endl;
using std::cout;

#include <cstdlib> // for exit fn prototype

#include <cmath> // for fabs

#include "quadFunctions.h" // user defined header file

bool approxEquals(double a, double b, double tolerance = 0.005)
{
  return ( fabs(a-b) <= tolerance);
}

bool approxEquals(Complex_C a, Complex_C b, double tolerance = 0.005)
{
  return ( fabs(a.getReal()-b.getReal()) <= tolerance  &&
	   fabs(a.getImag()-b.getImag()) <= tolerance) ) ;
}


void testQuadSolver(double a, double b, double c, 
		    Complex_C expectedRoot1, 
		    Complex_C expectedRoot2)
{
  Complex_C actualRoot1 = quadSolve1(a,b,c);
  Complex_C actualRoot2 = quadSolve2(a,b,c);

  if ( approxEquals(actualRoot1,expectedRoot1) &&
       approxEquals(actualRoot2,expectedRoot2) )
    cout << "Passed" << endl;
  else
    cout << "Failed" << endl;

}

int main(void)
{

  Complex_C c;
  c.setReal(2.0);
  Complex d;
  d.setReal(-1.0);

  testQuadSolver(1.0,-1.0,-2.0, Complex_C(2.0, 0.0), Complex_C(-1.0,0.0));
  testQuadSolver(1.0, 4.0, 4.0, Complex_C(-2.0,0.0), Complex_C(-2.0,0.0)); 

  testQuadSolver(1.0, 2.0, 3.0, Complex_C(-1.0,sqrt(2.0)), Complex_C(-1.0,-sqrt(2.0))); 

@@ Next time.... see if this works...

  return 0;
}
