Result tryRule( TotalisticRule r, int fieldSize ){
		double p = 0.5;
		
		ArrayField field = new ArrayField();
		field.setCells( Util.randomField( fieldSize, p) );
		Path[] soup = field.getAliveCellsArray(); //it returns reference
		sortCells( soup );
		
		int initialPopulation = soup.length;
		
		int limitPopulaion = initialPopulation * 10;
		int limitIteration = 500;
		int step = 0;
		
		while ( soup.length > 0 && soup.length < limitPopulaion && step < limitIteration){
			field.evaluate( r );
			Path[] soup1 = field.getAliveCellsArray();
			step += 1;
			sortCells( soup1 );
			if (Arrays.equals( soup1, soup )){//stabilized
				return new Result( R_STATIC, step );
			}
			soup = soup1;
		}
		//now analyze the situation.
		if ( soup.length == 0 ) return new Result( R_DIE_OUT, step );
		if ( soup.length >= limitPopulaion ) return new Result(R_EXPONENTIAL, step);
		//most interesting case.
		//Trying to detect cycle
		int period = detectCycle( field, r );
		if (period == NO_PERIOD){
			//search for the gliders
			if ( hasGliders( soup, fieldSize ))
				return new Result( R_CHAOTIC_GLIDERS, NO_PERIOD);
			else
				return new Result( R_CHAOTIC, NO_PERIOD );
		}
		else
			return new Result( R_CYCLIC, period );
	}