import util.*;
import acm.program.*;
import java.lang.*;
import java.text.DecimalFormat;
public class TestTemperature extends DialogProgram  {
  public void run()  {
    //create a single string to output to a dialog box
    String results = "The constructor TEST results are:\n";

    // Testing constructors and setting up for various tests
    Temperature T0 = new Temperature();
    Temperature T1 = new Temperature(0.0);
    Temperature T2 = new Temperature('C');
    Temperature T3 = new Temperature(0.0, 'C');
    Temperature T4 = new Temperature(-40.0, 'C');
    Temperature T5 = new Temperature(-40.0, 'F');
    Temperature T6 = new Temperature(0.0, 'C');
    Temperature T7 = new Temperature(32.0, 'F');
    Temperature T8 = new Temperature(100.0, 'C');
    Temperature T9 = new Temperature(212.0, 'F');
    Temperature Bad1 = new Temperature(100.0,'K');
    Temperature Bad2 = new Temperature('M');

    // Test that 0 degrees Celsius same no matter how created;  also tests isEquals()
    if (T0.isEqual(T1))
    results += "Default and double (zero) -- OKAY\n";
    else
    results += "Default and double (zero) failed equals\n";
       
/*  if (T0.isEqual(T2))
    results += "Default and 'C' (zero) -- OKAY\n";
    else
    results += "Default and 'C' (zero) failed equals\n";
    
    if (T0.isEqual(T3))
    results += "Default and two-param (zero) -- OKAY\n";
    else
    results += "Default and two-param (zero) failed equals\n";
    
   if (Bad2.isEqual(T3))
      results += "Bad scale replaced with 'C', one-param  -- OKAY\n";
    else
      results += "Bad scale in constructor, one-param  -- FAILED\n";
    
    if (Bad1.isEqual(T8))
      results += "Bad scale replaced with 'C', two-param  -- OKAY\n";
    else
      results += "Bad scale in constructor, two-param  -- FAILED\n";
    
    // Test equivalent values in Celsius and Fahrenheit
    results += "\nTEST equivalent temperatures:\n";
    if (T4.isEqual(T5))
    results += "Same at -40.0 -- OKAY\n";
    else
    results += "Same at -40.0 failed equals\n";
    
    if (T6.isEqual(T7))
    results += "Same at freezing -- OKAY\n";
    else
    results += "Same at freezing failed equals\n";
    
    if (T8.isEqual(T9))
    results += "Same at boiling -- OKAY\n";
    else
    results += "Same at boiling failed equals\n";
    
    // Test toString() and getDegreesF()/getDegreesC()
    results += "\nTEST toString() and getDegreesC()/getDegreesF(): \n";
    results += "toString(): " +T8.toString() + " --- in F is: " +
    patternDot2.format(T8.getDegreesF()) + "\n";
    
    results += "toString(): " + T9.toString() + " --- in C is: " +
    patternDot2.format(T9.getDegreesC()) + "\n";
    
    // Test isGreater() / isLess()
    results += "\nTEST inequalities\n";
    if (T7.isLess(T9))
    results += "isLess() -- OKAY\n";
    else
    results += "isLess() -- FAILED\n";
    
    if (T9.isGreater(T7))
    results += "isGreater() -- OKAY\n";
    else
    results += "isGreater() -- FAILED\n";
    
    // TEST mutators
    results += "\nTEST mutators\n";
    T5.setValue(98.6);
    T1.setScale('F');
    T2.setTemperature(98.6, 'F');
    T9.setScale('W');
    results += "Should be 98.60F:     " + T5.toString() + 
          "\nShould be 0.00F:       "  + T1.toString() + 
          "\nShould be  98.60F:    " + T2.toString() + 
          "\nShould be 212.0C:     " + T9.toString();

    // TEST add()
    results += "\n\nTEST add()";
    Temperature adder = Bad1.add(T9);
    results += "\nShould be 312.0C:     " + adder.toString();
    
    // Last test
    results += "\n\nlast TEST \nDisplay 123.4567 F, rounded to 2 decimal places:   \n";
    Temperature T10 = new Temperature(123.4567, 'F');
    results += T10.toString() + ", and equiv: " +
    patternDot2.format(T10.getDegreesC()) + " Celsius \n";
    
*/  results += "\nEND of TESTING";
    println(results);
  }

   public static void main(String args[]){
    (new TestTemperature()).start();  }

    // create a global floating-point formatter
  DecimalFormat patternDot2 = new DecimalFormat("####0.00");
}
