3939
4040import com .googlecode .aviator .AviatorEvaluator ;
4141import com .googlecode .aviator .Expression ;
42+ import com .googlecode .aviator .Options ;
4243import 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