package cds.astro ;

import java.io.*;
import java.util.*;
import cds.astro.*;


/**
 * Testing the Unit class.
 * Dependencies: Unit, Udef, Editing, Parsing, Astroformat.
 * @author Francois Ochsenbein, Pierre Fernique [CDS]
 * @version 1.0 : 04-Mar-2000
 */
public class tUnit {
  /* Execute one interpretation and print the result */
  static void show (Unit u) {
	System.out.println("Edited value=" + u);
	System.out.println("-------inSI: " + u.toStringInSI());
	System.out.println("-----unitSI: " + u.getSIunit());
	System.out.println("----explain: " + u.explainUnit());
  }


//* TEST -----------------------------------------
  static public void main(String[] argv)  throws IOException {
	  BufferedReader stdin = new
			BufferedReader(new InputStreamReader(System.in));
	  Unit u = new Unit() ;
	  Unit u1 = new Unit() ;
	  Unit u2 = new Unit() ;
	  String line, explanation ;
	  Enumeration list;

		/* Edit the default Unit */
	System.out.println("....Default: " + u) ;

	/* Add a new Definition */
	try { Unit.addSymbol("Rayleigh", "10+6/(4*pi).ph.cm-2.s-1.sr-1"); }
	catch (Exception e) { System.out.println(e) ; e.printStackTrace(); }

	line = "1Rayleigh";
	try   {
		 u.set(line);
		 u.dump(line);
		 show(u);
	}
	catch (Exception e) { System.out.println(e); e.printStackTrace(); }

	/* Try the Sexagesimal */
	System.out.println("");
	try { u.set("\"h:m:s\""); }
	catch (Exception e) { System.out.println(e) ; e.printStackTrace(); }
	try {
		 u.setValue("23:0.");
		 u.dump(line);
		 show(u);
	}
	catch (Exception e) { System.out.println(e); e.printStackTrace(); }


	System.out.print("\n====Will list all Symbols:");
	line = stdin.readLine() ;
	list = Unit.symbols();
	// System.out.println("list: " + list);
	while (list.hasMoreElements()) {
		 line = (String)list.nextElement();
		 System.out.print(line + "\t");
		 System.out.println(Unit.explainUnit(line));
		 // Unit.explain((String)list.nextElement());
	}

		/* Loop on getting positions, and convert */
	while(true) {
		System.out.print("\nGive a Number with Unit to interpret: ") ;
		 line = stdin.readLine() ; if (line == null) break;

		 try   { u.set(line); }
		 catch (Exception e) {
		    System.out.println(e) ;
		    e.printStackTrace();
		    continue;
		 }
		 u.dump("..0..");
		 show(u);

		 u1.set(u);
		 try { u1.log();  } 
		 catch (Exception e) { System.out.println(e); }
		 u1.dump(".Log."); System.out.println("Edited value=" + u1);

		 try { u1.dexp();  } 
		 catch (Exception e) { System.out.println(e); }
		 u1.dump(".Exp."); System.out.println("Edited value=" + u1);

		 try { u1.power(2);  } 
		 catch (Exception e) { System.out.println(e); }
		 u1.dump("..^2."); System.out.println("Edited value=" + u1);
		 try { u1.sqrt();  } 
		 catch (Exception e) { System.out.println(e); }
		 u1.dump(".sqrt"); System.out.println("Edited value=" + u1);


		System.out.print("Give a 2nd Unit with Unit to interpret: ") ;
		 line = stdin.readLine() ;
		 try   { u2.set(line); }
		 catch (Exception e) { System.out.println(e) ; continue; }
		 u2.dump("..2..");
		 show(u2);

		 u1.set(u);
		 try { u1.sum(u2) ; } 
		 catch (Exception e) { System.out.println(e); }
		 u1.dump(".Sum.");
		 show(u1);

		 u1.set(u);
		 try { u1.plus(u2) ; }
		 catch (Exception e) { System.out.println(e); }
		 u1.dump(".Plus");
		 show(u1);


		}
  	   	System.out.print("\n");
	 }
}

