@@ -147,6 +147,12 @@ describe("EQ formula", () => {
147
147
expect ( evaluateCell ( "A1" , { A1 : "=EQ(FALSE, )" } ) ) . toBe ( true ) ;
148
148
} ) ;
149
149
150
+ test ( "floating point rounding" , ( ) => {
151
+ expect ( evaluateCell ( "A1" , { A1 : "=EQ(0.3, 0.1+0.1+0.1)" } ) ) . toBe ( true ) ;
152
+ expect ( evaluateCell ( "A1" , { A1 : "=EQ(0.3, 0.3+1e-16)" } ) ) . toBe ( true ) ;
153
+ expect ( evaluateCell ( "A1" , { A1 : "=EQ(0.3, 0.3+1e-15)" } ) ) . toBe ( false ) ;
154
+ } ) ;
155
+
150
156
test ( "functional tests on cell arguments" , ( ) => {
151
157
expect ( evaluateCell ( "A1" , { A1 : "=EQ(A2, A3)" } ) ) . toBe ( true ) ;
152
158
expect ( evaluateCell ( "A1" , { A1 : "=EQ(A2, A3)" , A3 : "0" } ) ) . toBe ( true ) ;
@@ -252,6 +258,13 @@ describe("GT formula", () => {
252
258
expect ( evaluateCell ( "A1" , { A1 : "=GT(A2, A3)" , A2 : '="1"' , A3 : "99999" } ) ) . toBe ( true ) ;
253
259
expect ( evaluateCell ( "A1" , { A1 : "=GT(A2, A3)" , A2 : '="1"' , A3 : '="99999"' } ) ) . toBe ( false ) ;
254
260
} ) ;
261
+
262
+ test ( "floating point rounding" , ( ) => {
263
+ expect ( evaluateCell ( "A1" , { A1 : "=GT(0.3, 0.1+0.1+0.1)" } ) ) . toBe ( false ) ;
264
+ expect ( evaluateCell ( "A1" , { A1 : "=GT(0.3, 0.3+1e-16)" } ) ) . toBe ( false ) ;
265
+ expect ( evaluateCell ( "A1" , { A1 : "=GT(0.3, 0.3-1e-16)" } ) ) . toBe ( false ) ;
266
+ expect ( evaluateCell ( "A1" , { A1 : "=GT(0.3, 0.3-1e-15)" } ) ) . toBe ( true ) ;
267
+ } ) ;
255
268
} ) ;
256
269
257
270
describe ( "GTE formula" , ( ) => {
@@ -304,6 +317,14 @@ describe("GTE formula", () => {
304
317
expect ( evaluateCell ( "A1" , { A1 : '=GTE("1", "99999")' } ) ) . toBe ( false ) ;
305
318
} ) ;
306
319
320
+ test ( "floating point rounding" , ( ) => {
321
+ expect ( evaluateCell ( "A1" , { A1 : "=GTE(0.3, 0.1+0.1+0.1)" } ) ) . toBe ( true ) ;
322
+ expect ( evaluateCell ( "A1" , { A1 : "=GTE(0.3, 0.3+1e-16)" } ) ) . toBe ( true ) ;
323
+ expect ( evaluateCell ( "A1" , { A1 : "=GTE(0.3, 0.3-1e-16)" } ) ) . toBe ( true ) ;
324
+ expect ( evaluateCell ( "A1" , { A1 : "=GTE(0.3, 0.3-1e-15)" } ) ) . toBe ( true ) ;
325
+ expect ( evaluateCell ( "A1" , { A1 : "=GTE(0.3, 0.3+1e-15)" } ) ) . toBe ( false ) ;
326
+ } ) ;
327
+
307
328
test ( "functional tests on cell arguments" , ( ) => {
308
329
expect ( evaluateCell ( "A1" , { A1 : "=GTE(A2, A3)" } ) ) . toBe ( true ) ;
309
330
expect ( evaluateCell ( "A1" , { A1 : "=GTE(A2, A3)" , A2 : "1" } ) ) . toBe ( true ) ;
@@ -431,6 +452,13 @@ describe("LT formula", () => {
431
452
expect ( evaluateCell ( "A1" , { A1 : "=LT(A2, 42)" , A2 : "=KABOUM" } ) ) . toBe ( "#BAD_EXPR" ) ;
432
453
expect ( evaluateCell ( "A1" , { A1 : "=LT(KABOUM, KABOUM)" } ) ) . toBe ( "#BAD_EXPR" ) ;
433
454
} ) ;
455
+
456
+ test ( "floating point rounding" , ( ) => {
457
+ expect ( evaluateCell ( "A1" , { A1 : "=LT(0.3, 0.1+0.1+0.1)" } ) ) . toBe ( false ) ;
458
+ expect ( evaluateCell ( "A1" , { A1 : "=LT(0.3, 0.3+1e-16)" } ) ) . toBe ( false ) ;
459
+ expect ( evaluateCell ( "A1" , { A1 : "=LT(0.3, 0.3-1e-16)" } ) ) . toBe ( false ) ;
460
+ expect ( evaluateCell ( "A1" , { A1 : "=LT(0.3, 0.3+1e-15)" } ) ) . toBe ( true ) ;
461
+ } ) ;
434
462
} ) ;
435
463
436
464
describe ( "LTE formula" , ( ) => {
@@ -483,6 +511,10 @@ describe("LTE formula", () => {
483
511
expect ( evaluateCell ( "A1" , { A1 : '=LTE("1", "99999")' } ) ) . toBe ( true ) ;
484
512
} ) ;
485
513
514
+ test ( "floating point rounding" , ( ) => {
515
+ expect ( evaluateCell ( "A1" , { A1 : "=LTE(0.3, 0.1+0.1+0.1)" } ) ) . toBe ( true ) ;
516
+ } ) ;
517
+
486
518
test ( "functional tests on cell arguments" , ( ) => {
487
519
expect ( evaluateCell ( "A1" , { A1 : "=LTE(A2, A3)" } ) ) . toBe ( true ) ;
488
520
expect ( evaluateCell ( "A1" , { A1 : "=LTE(A2, A3)" , A2 : "1" } ) ) . toBe ( false ) ;
@@ -521,6 +553,14 @@ describe("LTE formula", () => {
521
553
expect ( evaluateCell ( "A1" , { A1 : "=LTE(A2, 42)" , A2 : "=KABOUM" } ) ) . toBe ( "#BAD_EXPR" ) ;
522
554
expect ( evaluateCell ( "A1" , { A1 : "=LTE(KABOUM, KABOUM)" } ) ) . toBe ( "#BAD_EXPR" ) ;
523
555
} ) ;
556
+
557
+ test ( "floating point rounding" , ( ) => {
558
+ expect ( evaluateCell ( "A1" , { A1 : "=LTE(0.3, 0.1+0.1+0.1)" } ) ) . toBe ( true ) ;
559
+ expect ( evaluateCell ( "A1" , { A1 : "=LTE(0.3, 0.3+1e-16)" } ) ) . toBe ( true ) ;
560
+ expect ( evaluateCell ( "A1" , { A1 : "=LTE(0.3, 0.3-1e-16)" } ) ) . toBe ( true ) ;
561
+ expect ( evaluateCell ( "A1" , { A1 : "=LTE(0.3, 0.3-1e-15)" } ) ) . toBe ( false ) ;
562
+ expect ( evaluateCell ( "A1" , { A1 : "=LTE(0.3, 0.3+1e-15)" } ) ) . toBe ( true ) ;
563
+ } ) ;
524
564
} ) ;
525
565
526
566
describe ( "MINUS formula" , ( ) => {
@@ -656,6 +696,12 @@ describe("NE formula", () => {
656
696
expect ( evaluateCell ( "A1" , { A1 : "=NE(A2, 42)" , A2 : "=KABOUM" } ) ) . toBe ( "#BAD_EXPR" ) ;
657
697
expect ( evaluateCell ( "A1" , { A1 : "=NE(KABOUM, KABOUM)" } ) ) . toBe ( "#BAD_EXPR" ) ;
658
698
} ) ;
699
+
700
+ test ( "floating point rounding" , ( ) => {
701
+ expect ( evaluateCell ( "A1" , { A1 : "=NE(0.3, 0.1+0.1+0.1)" } ) ) . toBe ( false ) ;
702
+ expect ( evaluateCell ( "A1" , { A1 : "=NE(0.3, 0.3+1e-16)" } ) ) . toBe ( false ) ;
703
+ expect ( evaluateCell ( "A1" , { A1 : "=NE(0.3, 0.3+1e-15)" } ) ) . toBe ( true ) ;
704
+ } ) ;
659
705
} ) ;
660
706
661
707
describe ( "POW formula" , ( ) => {
0 commit comments