/*
* Copyright (c) 2006-2011 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.emulation.hibernate3.ast.whereClause;
import java.math.*;
import mockit.emulation.hibernate3.ast.*;
import static org.junit.Assert.*;
import org.junit.*;
public final class UnaryExprTest
{
@Test
public void parseWithoutMinusOrPlusSign()
{
Tokens tokens = new Tokens("o.code");
Expr expr = UnaryExpr.parse(tokens);
assertTrue(expr instanceof AccessPathExpr);
assertFalse(tokens.hasNext());
}
@Test
public void parseWithPlusSign()
{
Tokens tokens = new Tokens("+40");
Expr expr = UnaryExpr.parse(tokens);
assertTrue(expr instanceof ConstantExpr);
assertFalse(tokens.hasNext());
}
@Test
public void parseWithMinusSign()
{
Tokens tokens = new Tokens("-3.56");
Expr expr = UnaryExpr.parse(tokens);
assertTrue(expr instanceof ConstantExpr);
assertFalse(tokens.hasNext());
}
@Test
public void parseSomethingElse()
{
Tokens tokens = new Tokens(")");
Expr expr = UnaryExpr.parse(tokens);
assertNull(expr);
assertEquals(-1, tokens.getPosition());
}
@Test
public void parseEmpty()
{
Tokens tokens = new Tokens("");
Expr expr = UnaryExpr.parse(tokens);
assertNull(expr);
assertEquals(-1, tokens.getPosition());
}
@Test
public void evaluateMinusInteger()
{
int value = 602;
Object result = evaluateUnaryExpr(value);
assertEquals(-value, result);
}
private Object evaluateUnaryExpr(Object value)
{
UnaryExpr expr = new UnaryExpr(new ConstantExpr(value));
return expr.evaluate(new QueryEval());
}
@Test
public void evaluateMinusNegativeInteger()
{
Expr expr = UnaryExpr.parse(new Tokens("-602"));
Object result = expr.evaluate(new QueryEval());
assertEquals(-602, result);
}
@Test
public void evaluateMinusLong()
{
long value = 602L;
Object result = evaluateUnaryExpr(value);
assertEquals(-value, result);
}
@Test
public void evaluateMinusShort()
{
short value = 602;
Object result = evaluateUnaryExpr(value);
assertEquals(-value, result);
}
@Test
public void evaluateMinusByte()
{
byte value = 102;
Object result = evaluateUnaryExpr(value);
assertEquals(-value, result);
}
@Test
public void evaluateMinusFloat()
{
float value = 602.0F;
Object result = evaluateUnaryExpr(value);
assertEquals(-value, (Float) result, 0.0F);
}
@Test
public void evaluateMinusDouble()
{
double value = 602.0;
Object result = evaluateUnaryExpr(value);
assertEquals(-value, (Double) result, 0.0);
}
@Test
public void evaluateMinusBigInteger()
{
BigInteger value = new BigInteger("602");
Object result = evaluateUnaryExpr(value);
assertEquals(0, value.negate().compareTo((BigInteger) result));
}
@Test
public void evaluateMinusBigDecimal()
{
BigDecimal value = new BigDecimal("602");
Object result = evaluateUnaryExpr(value);
assertEquals(0, value.negate().compareTo((BigDecimal) result));
}
}