package GenRGenS.ratexpr;
import java.util.*;
import java.io.*;


/** Classe implémentant un état dans un automate. */
class Etat {
	
	
	protected Integer _num;
	protected boolean _initial,_terminal;
	
	public Etat() { this(0,false,false); }
	
	public Etat(int num) { this(num,false,false); }
	
	public Etat(int num,boolean i,boolean t) {
		_num = new Integer(num);
		_initial = i;
		_terminal = t;
	}
	
	public boolean equals(Object o) {
		if (o instanceof Etat)
			return (_num.equals(((Etat) o).getNum()));
		else
			return false;
	}
	
	/** Un état est égale à un autre si et seulement si leur numéro sont égaux */
	public int hashCode() { return _num.intValue(); }
	
	public String toString() { 
		
		if (_terminal && _initial)
			return "||>"+_num.intValue()+"||";
		if (_terminal)
			return "||"+_num.intValue()+"||";
		if (_initial)
			return "|>"+_num.intValue();
		return ""+_num.intValue();
	}
	
	public Integer getNum() { return _num; }
	
	public boolean isInitial() { return _initial; }
	
	public boolean isTerminal() { return _terminal; }
	
	public void setInitial(boolean b) { _initial = b; }
	
	public void setTerminal(boolean b) { _terminal = b; }
	
	public static void main(String[] argv) {
		try{
		
		PrintStream f = new PrintStream(new FileOutputStream("Etat.test"));
		
		Etat e,e1,e2;
		boolean ok;
		//Test1
		f.print("Test 1 : Constructeur sans arguments ... ");
		e = new Etat();
		ok = e.getNum().intValue() == 0 && !e.isInitial() && !e.isTerminal();
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		//Test2
		f.print("Test 2 : Constructeur à 1 argument ... ");
		e = new Etat(5);
		ok = e.getNum().intValue() == 5 && !e.isInitial() && !e.isTerminal();
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		//Test3
		f.print("Test 3 : Constructeur à 3 arguments ... ");
		e = new Etat(10,true,true);
		ok = e.getNum().intValue() == 10 && e.isInitial() && e.isTerminal();
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		//Test4
		f.print("Test 4 : Egalité, 2 fois le même état ... ");
		e = new Etat();
		ok = e.equals(e);
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		//Test5
		f.print("Test 5 : Egalité, 2 états différents ayant les mêmes champs ... ");
		e1 = new Etat();e2 = new Etat();
		ok = e1.equals(e2);
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		//Test6
		f.print("Test 6 : Egalité, 2 états différents ayant les champs différents ... ");
		e1 = new Etat(0);e2 = new Etat(1);
		ok = !e1.equals(e2);
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		//Test7
		f.print("Test 7 : Egalité, 2 états ayant leurs numéros égaux et pas les autres champs ... ");
		e1 = new Etat(0,true,false);e2 = new Etat(0,false,true);
		ok = e1.equals(e2);
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		//Test8
		f.print("Test 8 : setInitial(true) et setTerminal(true) ... ");
		e = new Etat();
		e.setInitial(true);
		e.setTerminal(true);
		ok = e.isInitial() && e.isTerminal();
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		//Test9
		f.print("Test 9 : setInitial(false) et setTerminal(false) ... ");
		e = new Etat(0,true,true);
		e.setInitial(false);
		e.setTerminal(false);
		ok = !e.isInitial() && !e.isTerminal();
		if (ok)
			f.println("OK");
		else
			f.println("KO");
		
		}catch (FileNotFoundException e) {System.err.println(e);}
	}
}