import java.util.*;

public class Test {
    public static Onion o;

    public static void aux() {
	/*
	Iterator a=o.chain.iterator();
	Onion.Vertex b;
	for(;a.hasNext();) {
	    b=(Onion.Vertex) a.next();
	    System.out.print(" "+String.valueOf(b.faceCount));
	}
	System.out.println("");
	*/
    }

    public static void main(String[] args) {
	if(args.length!=3) { System.out.println("3 args : p,q,n"); System.exit(-1); }
	o=new Onion();
	System.out.println("Onion created");
	o.p=Integer.valueOf(args[0]).intValue();
	o.q=Integer.valueOf(args[1]).intValue();	
	o.computeConstants();
	System.out.println("Constants computed");
	o.germ();
	System.out.println("Germ created, chain has " +
			   o.chain.size() + " elements");
	aux();
	for(int i=0; i<Integer.valueOf(args[2]).intValue(); i++) {
	    o.growOnce();
	    System.out.println("Layer added, chain now has " +
			       o.chain.size() + " elements");	    
	    aux();
	}
	o.linkEverybody();
	System.out.println("Links done");
	System.out.println("Euler test : "
	+ o.room.size() + "-" + o.segments.size() + "+" + o.vertices.size()
	+ " = "+(o.room.size()-o.segments.size()+o.vertices.size())
        + " (should be = 1)");

	/*
	for(int i=0; i<o.vertices.size(); i++) {
	    int k=0; for(int j=0; j<o.q; j++) {
		if(((Onion.Vertex) o.vertices.elementAt(i)).segment[j]!=null) k++; }
	    int k2=0; for(int j=0; j<o.q; j++) {
		if(((Onion.Vertex) o.vertices.elementAt(i)).neighbor[j]!=null) k2++; }
	    System.out.println("Vertex "+i+" has "+k+" segments and "
			       + k2 + " neighbors");
	}
	*/
	o.generateMaze();
	System.out.println("Maze generated");
	int k=0; for(int i=0; i<o.segments.size(); i++) {
	    if(((Onion.Segment) o.segments.elementAt(i)).isOpen==false) { k++; }
	}
	System.out.println("Euler test : "+1+"-"+k+"+"+o.vertices.size()
	+" = "+(1-k+o.vertices.size()) + " (should be = 1)");
    }
}
