@@ -491,3 +491,136 @@ TEST_CASE("Wasm/" BACKEND_NAME "/strncpy", "[core][wasm]")
491
491
CodeGenContext::Dispose ();
492
492
Module::Dispose ();
493
493
}
494
+
495
+ TEMPLATE_TEST_CASE (" Wasm/" BACKEND_NAME " /Decimal" , " [core][wasm]" ,
496
+ Decimal32, Decimal64)
497
+ {
498
+ Module::Init ();
499
+
500
+ using decimal = TestType;
501
+ using arithmetic_type = typename decimal::arithmetic_type;
502
+
503
+ #define A decimal ( 142 , 2 )
504
+ #define B decimal (1337 , 2 )
505
+ #define C decimal (-256 , 2 )
506
+ #define D decimal ( 113 , 3 )
507
+ #define E decimal ( 12 , 1 )
508
+
509
+ #define I PrimitiveExpr<arithmetic_type>(13 )
510
+
511
+ SECTION (" add" )
512
+ {
513
+ CHECK_RESULT_INLINE (1479 , arithmetic_type (void ), { RETURN ((A + B).val ()); });
514
+ CHECK_RESULT_INLINE (1479 , arithmetic_type (void ), { RETURN ((B + A).val ()); });
515
+
516
+ CHECK_RESULT_INLINE (-114 , arithmetic_type (void ), { RETURN ((A + C).val ()); });
517
+ CHECK_RESULT_INLINE (-114 , arithmetic_type (void ), { RETURN ((C + A).val ()); });
518
+
519
+ CHECK_RESULT_INLINE (1533 , arithmetic_type (void ), { RETURN ((A + D).val ()); });
520
+ CHECK_RESULT_INLINE (1533 , arithmetic_type (void ), { RETURN ((D + A).val ()); });
521
+
522
+ CHECK_RESULT_INLINE (262 , arithmetic_type (void ), { RETURN ((A + E).val ()); });
523
+ CHECK_RESULT_INLINE (262 , arithmetic_type (void ), { RETURN ((E + A).val ()); });
524
+
525
+ CHECK_RESULT_INLINE (1313 , arithmetic_type (void ), { RETURN ((D + E).val ()); });
526
+ CHECK_RESULT_INLINE (1313 , arithmetic_type (void ), { RETURN ((E + D).val ()); });
527
+
528
+ CHECK_RESULT_INLINE (-2447 , arithmetic_type (void ), { RETURN ((C + D).val ()); });
529
+ CHECK_RESULT_INLINE (-2447 , arithmetic_type (void ), { RETURN ((D + C).val ()); });
530
+
531
+ CHECK_RESULT_INLINE (-136 , arithmetic_type (void ), { RETURN ((C + E).val ()); });
532
+ CHECK_RESULT_INLINE (-136 , arithmetic_type (void ), { RETURN ((E + C).val ()); });
533
+
534
+ CHECK_RESULT_INLINE (1442 , arithmetic_type (void ), { RETURN ((A + I).val ()); });
535
+ CHECK_RESULT_INLINE (1442 , arithmetic_type (void ), { RETURN ((I + A).val ()); });
536
+ }
537
+
538
+ SECTION (" subtract" )
539
+ {
540
+ CHECK_RESULT_INLINE (-1195 , arithmetic_type (void ), { RETURN ((A - B).val ()); });
541
+ CHECK_RESULT_INLINE (1195 , arithmetic_type (void ), { RETURN ((B - A).val ()); });
542
+
543
+ CHECK_RESULT_INLINE (398 , arithmetic_type (void ), { RETURN ((A - C).val ()); });
544
+ CHECK_RESULT_INLINE (-398 , arithmetic_type (void ), { RETURN ((C - A).val ()); });
545
+
546
+ CHECK_RESULT_INLINE (1307 , arithmetic_type (void ), { RETURN ((A - D).val ()); });
547
+ CHECK_RESULT_INLINE (-1307 , arithmetic_type (void ), { RETURN ((D - A).val ()); });
548
+
549
+ CHECK_RESULT_INLINE (22 , arithmetic_type (void ), { RETURN ((A - E).val ()); });
550
+ CHECK_RESULT_INLINE (-22 , arithmetic_type (void ), { RETURN ((E - A).val ()); });
551
+
552
+ CHECK_RESULT_INLINE (-1087 , arithmetic_type (void ), { RETURN ((D - E).val ()); });
553
+ CHECK_RESULT_INLINE (1087 , arithmetic_type (void ), { RETURN ((E - D).val ()); });
554
+
555
+ CHECK_RESULT_INLINE (-2673 , arithmetic_type (void ), { RETURN ((C - D).val ()); });
556
+ CHECK_RESULT_INLINE (2673 , arithmetic_type (void ), { RETURN ((D - C).val ()); });
557
+
558
+ CHECK_RESULT_INLINE (-376 , arithmetic_type (void ), { RETURN ((C - E).val ()); });
559
+ CHECK_RESULT_INLINE (376 , arithmetic_type (void ), { RETURN ((E - C).val ()); });
560
+
561
+ CHECK_RESULT_INLINE (-1158 , arithmetic_type (void ), { RETURN ((A - I).val ()); });
562
+ CHECK_RESULT_INLINE (1158 , arithmetic_type (void ), { RETURN ((I - A).val ()); });
563
+ }
564
+
565
+ SECTION (" multiply" )
566
+ {
567
+ CHECK_RESULT_INLINE (1898 , arithmetic_type (void ), { RETURN ((A * B).val ()); });
568
+ CHECK_RESULT_INLINE (1898 , arithmetic_type (void ), { RETURN ((B * A).val ()); });
569
+
570
+ CHECK_RESULT_INLINE (-363 , arithmetic_type (void ), { RETURN ((A * C).val ()); });
571
+ CHECK_RESULT_INLINE (-363 , arithmetic_type (void ), { RETURN ((C * A).val ()); });
572
+
573
+ CHECK_RESULT_INLINE (160 , arithmetic_type (void ), { RETURN ((A * D).val ()); });
574
+ CHECK_RESULT_INLINE (160 , arithmetic_type (void ), { RETURN ((D * A).val ()); });
575
+
576
+ CHECK_RESULT_INLINE (170 , arithmetic_type (void ), { RETURN ((A * E).val ()); });
577
+ CHECK_RESULT_INLINE (170 , arithmetic_type (void ), { RETURN ((E * A).val ()); });
578
+
579
+ CHECK_RESULT_INLINE (135 , arithmetic_type (void ), { RETURN ((D * E).val ()); });
580
+ CHECK_RESULT_INLINE (135 , arithmetic_type (void ), { RETURN ((E * D).val ()); });
581
+
582
+ CHECK_RESULT_INLINE (-289 , arithmetic_type (void ), { RETURN ((C * D).val ()); });
583
+ CHECK_RESULT_INLINE (-289 , arithmetic_type (void ), { RETURN ((D * C).val ()); });
584
+
585
+ CHECK_RESULT_INLINE (-307 , arithmetic_type (void ), { RETURN ((C * E).val ()); });
586
+ CHECK_RESULT_INLINE (-307 , arithmetic_type (void ), { RETURN ((E * C).val ()); });
587
+
588
+ CHECK_RESULT_INLINE (1846 , arithmetic_type (void ), { RETURN ((A * I).val ()); });
589
+ CHECK_RESULT_INLINE (1846 , arithmetic_type (void ), { RETURN ((I * A).val ()); });
590
+ }
591
+
592
+ SECTION (" divide" )
593
+ {
594
+ CHECK_RESULT_INLINE (10 , arithmetic_type (void ), { RETURN ((A / B).val ()); });
595
+ CHECK_RESULT_INLINE (941 , arithmetic_type (void ), { RETURN ((B / A).val ()); });
596
+
597
+ CHECK_RESULT_INLINE (-55 , arithmetic_type (void ), { RETURN ((A / C).val ()); });
598
+ CHECK_RESULT_INLINE (-180 , arithmetic_type (void ), { RETURN ((C / A).val ()); });
599
+
600
+ CHECK_RESULT_INLINE (12566 , arithmetic_type (void ), { RETURN ((A / D).val ()); });
601
+ CHECK_RESULT_INLINE (79 , arithmetic_type (void ), { RETURN ((D / A).val ()); });
602
+
603
+ CHECK_RESULT_INLINE (118 , arithmetic_type (void ), { RETURN ((A / E).val ()); });
604
+ CHECK_RESULT_INLINE (84 , arithmetic_type (void ), { RETURN ((E / A).val ()); });
605
+
606
+ CHECK_RESULT_INLINE (94 , arithmetic_type (void ), { RETURN ((D / E).val ()); });
607
+ CHECK_RESULT_INLINE (10619 , arithmetic_type (void ), { RETURN ((E / D).val ()); });
608
+
609
+ CHECK_RESULT_INLINE (-22654 , arithmetic_type (void ), { RETURN ((C / D).val ()); });
610
+ CHECK_RESULT_INLINE (-44 , arithmetic_type (void ), { RETURN ((D / C).val ()); });
611
+
612
+ CHECK_RESULT_INLINE (-213 , arithmetic_type (void ), { RETURN ((C / E).val ()); });
613
+ CHECK_RESULT_INLINE (-46 , arithmetic_type (void ), { RETURN ((E / C).val ()); });
614
+
615
+ CHECK_RESULT_INLINE (10 , arithmetic_type (void ), { RETURN ((A / I).val ()); });
616
+ CHECK_RESULT_INLINE (915 , arithmetic_type (void ), { RETURN ((I / A).val ()); });
617
+ }
618
+
619
+ #undef A
620
+ #undef B
621
+ #undef C
622
+ #undef D
623
+ #undef E
624
+ #undef I
625
+ Module::Dispose ();
626
+ }
0 commit comments