Skip to content

Commit 34ee209

Browse files
committed
(feat) Adds unit test
1 parent eea9427 commit 34ee209

File tree

4 files changed

+85
-15
lines changed

4 files changed

+85
-15
lines changed

src/main/java/com/googlecode/aviator/AviatorEvaluator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@ public final class AviatorEvaluator {
108108
public static final String VERSION = "2.1.1";
109109

110110
/**
111-
* Generated java class version,default 1.5
111+
* Generated java class version,default 1.6
112112
*/
113-
public static int BYTECODE_VER = Opcodes.V1_5;
113+
public static int BYTECODE_VER = Opcodes.V1_6;
114114

115115
private static OutputStream traceOutputStream = System.out;
116116

src/test/java/com/googlecode/aviator/AviatorEvaluatorUnitTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import static org.junit.Assert.assertNotSame;
2424
import static org.junit.Assert.assertSame;
2525

26+
import java.math.MathContext;
2627
import java.util.HashMap;
2728
import java.util.Map;
2829

@@ -45,6 +46,30 @@ public void testCompileWithoutCache() {
4546
}
4647

4748

49+
@Test
50+
public void testDefaultOptionValues() {
51+
assertEquals(AviatorEvaluator.getOption(Options.TRACE), false);
52+
assertEquals(AviatorEvaluator.getOption(Options.ALWAYS_USE_DOUBLE_AS_DECIMAL), false);
53+
assertEquals(AviatorEvaluator.getOption(Options.OPTIMIZE_LEVEL), AviatorEvaluator.EVAL);
54+
assertEquals(AviatorEvaluator.getOption(Options.MATH_CONTEXT), MathContext.DECIMAL128);
55+
}
56+
57+
58+
@Test
59+
public void testSetOptions() {
60+
try {
61+
AviatorEvaluator.setOption(Options.TRACE, true);
62+
assertEquals(AviatorEvaluator.getOption(Options.TRACE), true);
63+
AviatorEvaluator.setOption(Options.OPTIMIZE_LEVEL, AviatorEvaluator.COMPILE);
64+
assertEquals(AviatorEvaluator.getOption(Options.OPTIMIZE_LEVEL), AviatorEvaluator.COMPILE);
65+
}
66+
finally {
67+
AviatorEvaluator.setOption(Options.TRACE, false);
68+
AviatorEvaluator.setOption(Options.OPTIMIZE_LEVEL, AviatorEvaluator.EVAL);
69+
}
70+
}
71+
72+
4873
@Test
4974
public void testExec() {
5075
String exp1 = "b-c+a";

src/test/java/com/googlecode/aviator/lexer/ExpressionLexerUnitTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
import org.junit.Test;
3030

31+
import com.googlecode.aviator.AviatorEvaluator;
32+
import com.googlecode.aviator.Options;
3133
import com.googlecode.aviator.exception.CompileExpressionErrorException;
3234
import com.googlecode.aviator.lexer.token.Token;
3335
import com.googlecode.aviator.lexer.token.Token.TokenType;
@@ -215,6 +217,23 @@ public void testParseNumbers() {
215217
}
216218

217219

220+
@Test
221+
public void testParseDoubleAsDecimal() {
222+
try {
223+
AviatorEvaluator.setOption(Options.ALWAYS_USE_DOUBLE_AS_DECIMAL, true);
224+
this.lexer = new ExpressionLexer("3.2");
225+
Token<?> token = this.lexer.scan();
226+
assertEquals(TokenType.Number, token.getType());
227+
assertTrue(token.getValue(null) instanceof BigDecimal);
228+
assertEquals(new BigDecimal("3.2"), token.getValue(null));
229+
assertEquals(0, token.getStartIndex());
230+
}
231+
finally {
232+
AviatorEvaluator.setOption(Options.ALWAYS_USE_DOUBLE_AS_DECIMAL, false);
233+
}
234+
}
235+
236+
218237
@Test
219238
public void testParseLikeHexNumber() {
220239
this.lexer = new ExpressionLexer("0344");

src/test/java/com/googlecode/aviator/test/function/FunctionTest.java

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
import com.googlecode.aviator.AviatorEvaluator;
4141
import com.googlecode.aviator.Expression;
42+
import com.googlecode.aviator.Options;
4243
import com.googlecode.aviator.exception.ExpressionRuntimeException;
4344

4445

@@ -148,9 +149,9 @@ public void testLogicExpressionWithVariable() {
148149
assertEquals(
149150
true,
150151
AviatorEvaluator
151-
.execute(
152-
"i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99",
153-
env));
152+
.execute(
153+
"i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99",
154+
env));
154155
}
155156

156157

@@ -326,8 +327,8 @@ public void testBitOperations() {
326327
assertEquals(
327328
4 / 2 * 3 - 4 + (5 ^ 5 - 2 & 3) == 4000 ? !false && true ? 1 & 4 : 0 : 6L >> 2L * 2L / 4L
328329
^ ~699L + 100L << 4L >> 5L >> 1000L,
329-
AviatorEvaluator
330-
.execute("4 / 2 * 3 - 4 + (5 ^ 5 - 2 & 3) == 4000 ? (!false && true ? 1 & 4 : 0) : 6 >> 2 * 2 / 4^ ~699 + 100 << 4 >> 5 >> 1000"));
330+
AviatorEvaluator
331+
.execute("4 / 2 * 3 - 4 + (5 ^ 5 - 2 & 3) == 4000 ? (!false && true ? 1 & 4 : 0) : 6 >> 2 * 2 / 4^ ~699 + 100 << 4 >> 5 >> 1000"));
331332

332333
assertEquals((99 & 7) == (99 & 7) && false, AviatorEvaluator.execute("(99&7)==(99&7)&&false "));
333334
assertEquals((99 | 7) != (99 | 7) || false, AviatorEvaluator.execute("(99|7)!=(99|7)||false "));
@@ -359,10 +360,10 @@ public void testBitOperationsWithVariable() {
359360
assertEquals(
360361
4 / 2 * 3 - 4 + (5 ^ 5 - 2 & 3) == 4000 ? !false && true ? 1 & 4 : 0 : i >> j * k / i
361362
^ ~j + k << i >> j >> 1000L,
362-
AviatorEvaluator
363-
.execute(
364-
"4 / 2 * 3 - 4 + (5 ^ 5 - 2 & 3) == 4000 ? (!false && true ? 1 & 4 : 0) :i >> j * k / i ^ ~j + k << i >> j >> 1000,",
365-
env));
363+
AviatorEvaluator
364+
.execute(
365+
"4 / 2 * 3 - 4 + (5 ^ 5 - 2 & 3) == 4000 ? (!false && true ? 1 & 4 : 0) :i >> j * k / i ^ ~j + k << i >> j >> 1000,",
366+
env));
366367

367368
assertEquals((i & 7) == (i & 7) && false, AviatorEvaluator.execute("(i & 7) == (i & 7) && false ", env));
368369
assertEquals((j | k) != (j | k) || false, AviatorEvaluator.execute("(j | k) != (j | k) || false ", env));
@@ -385,7 +386,7 @@ public void testHexNumber() {
385386
assertEquals(~0xFF == 0Xff, AviatorEvaluator.execute("~0xFF==0Xff", env));
386387
assertEquals(~0xFF | k & 3 - 0X11, AviatorEvaluator.execute("~0xFF|k&3-0X11", env));
387388
assertEquals(0x45 > i ? 0x11 - 0344 * 5 / 7 : k / 0xFF - j * 0x45,
388-
AviatorEvaluator.execute("0x45>i?0x11-0344*5/7:k/0xFF-j*0x45 ", env));
389+
AviatorEvaluator.execute("0x45>i?0x11-0344*5/7:k/0xFF-j*0x45 ", env));
389390
}
390391

391392

@@ -609,14 +610,14 @@ public void testBigNumberBitOperations() {
609610
assertEquals(
610611
new BigInteger("1000000000000000000000000000000000").xor(new BigInteger("9999999999999999999999")),
611612
AviatorEvaluator.exec("a^b", new BigInteger("1000000000000000000000000000000000"), new BigInteger(
612-
"9999999999999999999999")));
613+
"9999999999999999999999")));
613614
assertEquals(
614615
new BigInteger("1000000000000000000000000000000000").and(new BigInteger("9999999999999999999999")),
615616
AviatorEvaluator.exec("a&b", new BigInteger("1000000000000000000000000000000000"), new BigInteger(
616-
"9999999999999999999999")));
617+
"9999999999999999999999")));
617618
assertEquals(new BigInteger("1000000000000000000000000000000000").or(new BigInteger("9999999999999999999999")),
618619
AviatorEvaluator.exec("a|b", new BigInteger("1000000000000000000000000000000000"), new BigInteger(
619-
"9999999999999999999999")));
620+
"9999999999999999999999")));
620621
assertEquals(new BigInteger("1000000000000000000000000000000000").shiftLeft(2),
621622
AviatorEvaluator.exec("a<<2", new BigInteger("1000000000000000000000000000000000")));
622623
assertEquals(new BigInteger("1000000000000000000000000000000000").shiftRight(2),
@@ -632,6 +633,31 @@ public void testDecimalBitAnd() {
632633
}
633634

634635

636+
@Test
637+
public void testAlwaysUseDoubleAsDecimal() {
638+
AviatorEvaluator.setOption(Options.ALWAYS_USE_DOUBLE_AS_DECIMAL, true);
639+
try {
640+
Object val = AviatorEvaluator.execute("3.2");
641+
assertTrue(val instanceof BigDecimal);
642+
assertEquals(new BigDecimal("3.2"), val);
643+
644+
val = AviatorEvaluator.execute("3.2 + 4.3");
645+
assertTrue(val instanceof BigDecimal);
646+
assertEquals(new BigDecimal("7.5"), val);
647+
648+
Map<String, Object> env = new HashMap<String, Object>();
649+
env.put("a", new BigDecimal("2.1"));
650+
env.put("b", 4);
651+
val = AviatorEvaluator.execute("3.2 + a * b ", env);
652+
assertTrue(val instanceof BigDecimal);
653+
assertEquals(new BigDecimal("11.6"), val);
654+
}
655+
finally {
656+
AviatorEvaluator.setOption(Options.ALWAYS_USE_DOUBLE_AS_DECIMAL, false);
657+
}
658+
}
659+
660+
635661
@Test
636662
public void testOtherFunction() {
637663
// AviatorEvaluator.setOptimize(AviatorEvaluator.EVAL);

0 commit comments

Comments
 (0)