// testComputeSplitTime5.cc
// P. Conrad 03/06/06  for CISC181
// write test cases for the computeSplitTime function

// split out the computeSplitTime function to a separate file


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

// we use "const char * const" instead of just "char *"
// because we want to be able to pass in string literals such as "1:51.0"
// The keyword const means that we cannot modify either the pointer,
// or the data pointed to.


#include "computeSplitTime.h"  // use quotes because it is MY .h file

void testComputeSplitTime(const char * const splitTimePtr, 
			  double expectedResult);

void testSecondsPart(double splitTime,
		     double expectedResult);

void testMinutesPart(double splitTime,
		     int expectedResult);

int main(void)
{
  testComputeSplitTime("1:51.0",111.0);
  testComputeSplitTime("2:00.0",120.0);
  testComputeSplitTime("1:51.9",111.9);  
  testComputeSplitTime("0:00.0",0.0);  



  testSecondsPart(111.0 , 51.0);
  testSecondsPart(120.0 , 0.0);
  testSecondsPart(111.9 , 51.9); // failed... how come?
  testSecondsPart(111.89999 , 51.89996); // failed... how come?
  testSecondsPart(111.8 , 51.8); 
  testSecondsPart(111.25 , 51.25); 
  testSecondsPart(0.0 , 0.0);
  
  testMinutesPart(111.0 , 1);
  testMinutesPart(120.0 , 2);
  testMinutesPart(111.9 , 1);
  testMinutesPart(0.0 , 0);


  return 0;
}


void testComputeSplitTime(const char * const splitTimePtr, 
			  double expectedResult)
{

  double result = computeSplitTime(splitTimePtr);

  if (result == expectedResult)
    cout << "testComputeSplitTime Passed" << endl;
  else
    cout << "testComputeSplitTime Failed" << endl;

  return; 
}

void testSecondsPart(double splitTime,
		     double expectedResult)
{

  double result = secondsPart(splitTime);

  double diff = result - expectedResult;

  
  // NOT this !!!  if (result == expectedResult)

  if (diff < 1E-10)  // don't test floating point numbers for equality
    {
      cout << "testSecondsPart Passed" << endl;
    }
  else
    {
      cout << "testSecondsPart Failed.. actual=" << setprecision (20) << result 
	   << " expected =" << setprecision (20) << expectedResult << endl;
      cout << "diff = " << setprecision(15) << diff << endl;
    }
  return; 
}

void testMinutesPart(double splitTime,
		     int expectedResult)

{

  int result = minutesPart(splitTime);

  if (result == expectedResult)
    cout << "testMinutesPart Passed" << endl;
  else
    cout << "testMinutesPart Failed" << endl;

  return; 
}




