// Path: Calculator/src/com/digipom/android/library/evaluator/PostfixEvaluator.java
// static class FlatToken {
// 	static final FlatToken UNDEFINED = new FlatToken();
// 
// 	static final int TYPE_UNDEFINED = 0;
// 	static final int TYPE_IDENTIFIER = 1;
// 	static final int TYPE_NUMBER_LITERAL = 2;
// 	static final int TYPE_OPERATOR = 3;
// 	static final int TYPE_PREDEF_FUNCTION = 4;
// 
// 	static final int OPERATOR_ADD = 0;
// 	static final int OPERATOR_SUBTRACT = 1;
// 	static final int OPERATOR_MULTIPLY = 2;
// 	static final int OPERATOR_DIVIDE = 3;
// 	static final int OPERATOR_POWER = 4;
// 	static final int OPERATOR_NEGATE = 5;
// 
// 	static final int FUNCTION_ABS = 0;
// 	static final int FUNCTION_SIN = 1;
// 	static final int FUNCTION_COS = 2;
// 	static final int FUNCTION_TAN = 3;
// 	static final int FUNCTION_POW = 4;
// 	static final int FUNCTION_LN = 5;
// 	static final int FUNCTION_SQRT = 6;
// 
// 	final int type;
// 
// 	int typeEnum;
// 	String name;
// 	float floatValue;
// 	double doubleValue;
// 	BigDecimal bigDecimalValue;
// 
// 	private FlatToken() {
// 		type = TYPE_UNDEFINED;
// 	}
// 
// 	FlatToken(Token fromToken, NumberPrecision numberPrecision) throws ParseException {
// 		if (fromToken instanceof Identifier) {
// 			type = TYPE_IDENTIFIER;
// 			name = ((Identifier) fromToken).name;
// 		} else if (fromToken instanceof NumberLiteral) {
// 			type = TYPE_NUMBER_LITERAL;
// 
// 			switch (numberPrecision) {
// 				case BIG_DECIMAL:
// 					bigDecimalValue = ((BigDecimalNumberLiteral) fromToken).value;
// 					break;
// 				case DOUBLE:
// 					doubleValue = ((DoubleNumberLiteral) fromToken).value;
// 					break;
// 				case FLOAT:
// 				default:
// 					floatValue = ((FloatNumberLiteral) fromToken).value;
// 					break;
// 			}
// 		} else if (fromToken instanceof Operator) {
// 			type = TYPE_OPERATOR;
// 
// 			switch ((Operator) fromToken) {
// 				case ADD:
// 					typeEnum = OPERATOR_ADD;
// 					break;
// 				case SUBTRACT:
// 					typeEnum = OPERATOR_SUBTRACT;
// 					break;
// 				case MULTIPLY:
// 					typeEnum = OPERATOR_MULTIPLY;
// 					break;
// 				case DIVIDE:
// 					typeEnum = OPERATOR_DIVIDE;
// 					break;
// 				case POWER:
// 					typeEnum = OPERATOR_POWER;
// 					break;
// 				case NEGATION:
// 					typeEnum = OPERATOR_NEGATE;
// 					break;
// 			}
// 		} else if (fromToken instanceof PredefinedFunction) {
// 			type = TYPE_PREDEF_FUNCTION;
// 
// 			switch ((PredefinedFunction) fromToken) {
// 				case ABS:
// 					typeEnum = FUNCTION_ABS;
// 					break;
// 				case SIN:
// 					typeEnum = FUNCTION_SIN;
// 					break;
// 				case COS:
// 					typeEnum = FUNCTION_COS;
// 					break;
// 				case TAN:
// 					typeEnum = FUNCTION_TAN;
// 					break;
// 				case POW:
// 					typeEnum = FUNCTION_POW;
// 					break;
// 				case LN:
// 					typeEnum = FUNCTION_LN;
// 					break;
// 				case SQRT:
// 					typeEnum = FUNCTION_SQRT;
// 					break;
// 			}
// 		} else {
// 			throw new ParseException("Unexpected token " + fromToken);
// 		}
// 	}
// }
// 
// Path: Calculator/src/com/digipom/android/library/evaluator/exception/ParseException.java
// public class ParseException extends Exception {
// 	private static final long serialVersionUID = 1L;
// 	
// 	public ParseException() {
// 		super();
// 	}
// 
// 	public ParseException(String detailMessage, Throwable throwable) {
// 		super(detailMessage, throwable);
// 	}
// 
// 	public ParseException(String detailMessage) {
// 		super(detailMessage);
// 	}
// 
// 	public ParseException(Throwable throwable) {
// 		super(throwable);
// 	}
// }


import junit.framework.TestCase;
import android.util.FloatMath;
import com.digipom.android.library.evaluator.PostfixEvaluator.FlatToken;
import com.digipom.android.library.evaluator.exception.ParseException;
				return (float) Math.pow(x, Math.pow(y, 2));
			}
		});
	}

	public void testSequentialCarets() throws ParseException {
		FloatPostfixEvaluator evaluator = new FloatPostfixEvaluator("x^2 * y^2");
		testCombos(RESOLUTION, evaluator, new ZCommand() {

			@Override
			public float execute(float x, float y) {
				return (float) (Math.pow(x, 2) * Math.pow(y, 2));
			}
		});
	}

	public void testCaretPrecedence() throws ParseException {
		FloatPostfixEvaluator evaluator = new FloatPostfixEvaluator("-3^2");

		testCombos(RESOLUTION, evaluator, new ZCommand() {

			@Override
			public float execute(float x, float y) {
				return (float) -Math.pow(3, 2);
			}
		});
	}
	
	private void testCombos(int range, FloatPostfixEvaluator evaluator, ZCommand zCommand) throws ParseException {
		FlatToken yIdentifier = evaluator.getIdentifier("y");
// Path: Calculator/src/com/digipom/android/library/evaluator/PostfixEvaluator.java
// static class FlatToken {
// 	static final FlatToken UNDEFINED = new FlatToken();
// 
// 	static final int TYPE_UNDEFINED = 0;
// 	static final int TYPE_IDENTIFIER = 1;
// 	static final int TYPE_NUMBER_LITERAL = 2;
// 	static final int TYPE_OPERATOR = 3;
// 	static final int TYPE_PREDEF_FUNCTION = 4;
// 
// 	static final int OPERATOR_ADD = 0;
// 	static final int OPERATOR_SUBTRACT = 1;
// 	static final int OPERATOR_MULTIPLY = 2;
// 	static final int OPERATOR_DIVIDE = 3;
// 	static final int OPERATOR_POWER = 4;
// 	static final int OPERATOR_NEGATE = 5;
// 
// 	static final int FUNCTION_ABS = 0;
// 	static final int FUNCTION_SIN = 1;
// 	static final int FUNCTION_COS = 2;
// 	static final int FUNCTION_TAN = 3;
// 	static final int FUNCTION_POW = 4;
// 	static final int FUNCTION_LN = 5;
// 	static final int FUNCTION_SQRT = 6;
// 
// 	final int type;
// 
// 	int typeEnum;
// 	String name;
// 	float floatValue;
// 	double doubleValue;
// 	BigDecimal bigDecimalValue;
// 
// 	private FlatToken() {
// 		type = TYPE_UNDEFINED;
// 	}
// 
// 	FlatToken(Token fromToken, NumberPrecision numberPrecision) throws ParseException {
// 		if (fromToken instanceof Identifier) {
// 			type = TYPE_IDENTIFIER;
// 			name = ((Identifier) fromToken).name;
// 		} else if (fromToken instanceof NumberLiteral) {
// 			type = TYPE_NUMBER_LITERAL;
// 
// 			switch (numberPrecision) {
// 				case BIG_DECIMAL:
// 					bigDecimalValue = ((BigDecimalNumberLiteral) fromToken).value;
// 					break;
// 				case DOUBLE:
// 					doubleValue = ((DoubleNumberLiteral) fromToken).value;
// 					break;
// 				case FLOAT:
// 				default:
// 					floatValue = ((FloatNumberLiteral) fromToken).value;
// 					break;
// 			}
// 		} else if (fromToken instanceof Operator) {
// 			type = TYPE_OPERATOR;
// 
// 			switch ((Operator) fromToken) {
// 				case ADD:
// 					typeEnum = OPERATOR_ADD;
// 					break;
// 				case SUBTRACT:
// 					typeEnum = OPERATOR_SUBTRACT;
// 					break;
// 				case MULTIPLY:
// 					typeEnum = OPERATOR_MULTIPLY;
// 					break;
// 				case DIVIDE:
// 					typeEnum = OPERATOR_DIVIDE;
// 					break;
// 				case POWER:
// 					typeEnum = OPERATOR_POWER;
// 					break;
// 				case NEGATION:
// 					typeEnum = OPERATOR_NEGATE;
// 					break;
// 			}
// 		} else if (fromToken instanceof PredefinedFunction) {
// 			type = TYPE_PREDEF_FUNCTION;
// 
// 			switch ((PredefinedFunction) fromToken) {
// 				case ABS:
// 					typeEnum = FUNCTION_ABS;
// 					break;
// 				case SIN:
// 					typeEnum = FUNCTION_SIN;
// 					break;
// 				case COS:
// 					typeEnum = FUNCTION_COS;
// 					break;
// 				case TAN:
// 					typeEnum = FUNCTION_TAN;
// 					break;
// 				case POW:
// 					typeEnum = FUNCTION_POW;
// 					break;
// 				case LN:
// 					typeEnum = FUNCTION_LN;
// 					break;
// 				case SQRT:
// 					typeEnum = FUNCTION_SQRT;
// 					break;
// 			}
// 		} else {
// 			throw new ParseException("Unexpected token " + fromToken);
// 		}
// 	}
// }
// 
// Path: Calculator/src/com/digipom/android/library/evaluator/exception/ParseException.java
// public class ParseException extends Exception {
// 	private static final long serialVersionUID = 1L;
// 	
// 	public ParseException() {
// 		super();
// 	}
// 
// 	public ParseException(String detailMessage, Throwable throwable) {
// 		super(detailMessage, throwable);
// 	}
// 
// 	public ParseException(String detailMessage) {
// 		super(detailMessage);
// 	}
// 
// 	public ParseException(Throwable throwable) {
// 		super(throwable);
// 	}
// }


// Path: CalculatorTest/src/com/digipom/android/library/evaluator/TestFloatEvaluator.java
import junit.framework.TestCase;
import android.util.FloatMath;
import com.digipom.android.library.evaluator.PostfixEvaluator.FlatToken;
import com.digipom.android.library.evaluator.exception.ParseException;

				return (float) Math.pow(x, Math.pow(y, 2));
			}
		});
	}

	public void testSequentialCarets() throws ParseException {
		FloatPostfixEvaluator evaluator = new FloatPostfixEvaluator("x^2 * y^2");
		testCombos(RESOLUTION, evaluator, new ZCommand() {

			@Override
			public float execute(float x, float y) {
				return (float) (Math.pow(x, 2) * Math.pow(y, 2));
			}
		});
	}

	public void testCaretPrecedence() throws ParseException {
		FloatPostfixEvaluator evaluator = new FloatPostfixEvaluator("-3^2");

		testCombos(RESOLUTION, evaluator, new ZCommand() {

			@Override
			public float execute(float x, float y) {
				return (float) -Math.pow(3, 2);
			}
		});
	}
	
	private void testCombos(int range, FloatPostfixEvaluator evaluator, ZCommand zCommand) throws ParseException {
		FlatToken yIdentifier = evaluator.getIdentifier("y");
		FlatToken xIdentifier = evaluator.getIdentifier("x");