@@ -36,7 +36,9 @@ public void literalsTest() {
36
36
assertExpression (1L , of (1L ));
37
37
assertExpression (1.0 , of (1.0 ));
38
38
assertExpression (BigDecimal .valueOf (1.0 ), of (BigDecimal .valueOf (1.0 )));
39
+ assertExpression (Decimal128 .parse ("1.0" ), of (Decimal128 .parse ("1.0" )));
39
40
assertThrows (IllegalArgumentException .class , () -> of ((BigDecimal ) null ));
41
+ assertThrows (IllegalArgumentException .class , () -> of ((Decimal128 ) null ));
40
42
41
43
// expression equality differs from bson equality
42
44
assertExpression (true , of (1L ).eq (of (1.0 )));
@@ -91,13 +93,29 @@ public void divideTest() {
91
93
0.5 ,
92
94
of (1 ).divide (of (2 )),
93
95
"{'$divide': [1, 2]}" );
94
- // divide always returns a Number, so the method is not on IntegerExpression
96
+
97
+ // however, there are differences in evaluation between numbers
98
+ // represented using Decimal128 and double:
99
+ assertExpression (
100
+ 2.5242187499999997 ,
101
+ of (3.231 ).divide (of (1.28 )));
102
+ assertExpression (
103
+ Decimal128 .parse ("2.52421875" ),
104
+ of (Decimal128 .parse ("3.231" )).divide (of (Decimal128 .parse ("1.28" ))));
105
+ assertExpression (
106
+ Decimal128 .parse ("2.52421875" ),
107
+ of (Decimal128 .parse ("3.231" )).divide (of (1.28 )));
108
+ assertExpression (
109
+ Decimal128 .parse ("2.52421875" ),
110
+ of (3.231 ).divide (of (Decimal128 .parse ("1.28" ))));
95
111
96
112
// convenience
97
113
assertExpression (0.5 , of (1.0 ).divide (2.0 ));
98
114
assertExpression (0.5 , of (1 ).divide (2.0 ));
99
115
assertExpression (0.5 , of (1 ).divide (2L ));
100
116
assertExpression (0.5 , of (1 ).divide (2 ));
117
+
118
+ // divide always returns a Number, so the method is not on IntegerExpression
101
119
}
102
120
103
121
@ Test
0 commit comments