@@ -619,5 +619,168 @@ TEST_CASE("PythonCompiler 1") {
619
619
LCompilers::Result<PythonCompiler::EvalResult>
620
620
r = e.evaluate2 (" 1" );
621
621
CHECK (r.ok );
622
- CHECK (r.result .type == PythonCompiler::EvalResult::none); // TODO: change to integer4 and check the value once printing top level expressions is implemented
622
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
623
+ CHECK (r.result .i32 == 1 );
624
+ }
625
+
626
+ TEST_CASE (" PythonCompiler i32 expressions" ) {
627
+ CompilerOptions cu;
628
+ cu.po .disable_main = true ;
629
+ cu.emit_debug_line_column = false ;
630
+ cu.generate_object_code = false ;
631
+ cu.interactive = true ;
632
+ cu.po .runtime_library_dir = LCompilers::LPython::get_runtime_library_dir ();
633
+ PythonCompiler e (cu);
634
+ LCompilers::Result<PythonCompiler::EvalResult>
635
+
636
+ r = e.evaluate2 (" 1" );
637
+ CHECK (r.ok );
638
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
639
+ CHECK (r.result .i32 == 1 );
640
+
641
+ r = e.evaluate2 (" 1 + 2" );
642
+ CHECK (r.ok );
643
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
644
+ CHECK (r.result .i32 == 3 );
645
+
646
+ r = e.evaluate2 (" 1 - 2" );
647
+ CHECK (r.ok );
648
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
649
+ CHECK (r.result .i32 == -1 );
650
+
651
+ r = e.evaluate2 (" 1 * 2" );
652
+ CHECK (r.ok );
653
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
654
+ CHECK (r.result .i32 == 2 );
655
+
656
+ r = e.evaluate2 (" 3 ** 3" );
657
+ CHECK (r.ok );
658
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
659
+ CHECK (r.result .i32 == 27 );
660
+
661
+ r = e.evaluate2 (" 4 // 2" );
662
+ CHECK (r.ok );
663
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
664
+ CHECK (r.result .i32 == 2 );
665
+
666
+ r = e.evaluate2 (" 4 / 2" );
667
+ CHECK (r.ok );
668
+ CHECK (r.result .type == PythonCompiler::EvalResult::real8);
669
+ CHECK (r.result .f64 == 2 );
670
+ }
671
+
672
+ TEST_CASE (" PythonCompiler i32 declaration" ) {
673
+ CompilerOptions cu;
674
+ cu.po .disable_main = true ;
675
+ cu.emit_debug_line_column = false ;
676
+ cu.generate_object_code = false ;
677
+ cu.interactive = true ;
678
+ cu.po .runtime_library_dir = LCompilers::LPython::get_runtime_library_dir ();
679
+ PythonCompiler e (cu);
680
+ LCompilers::Result<PythonCompiler::EvalResult>
681
+
682
+ r = e.evaluate2 (" i: i32" );
683
+ CHECK (r.ok );
684
+ CHECK (r.result .type == PythonCompiler::EvalResult::none);
685
+ r = e.evaluate2 (" i = 5" );
686
+ CHECK (r.ok );
687
+ CHECK (r.result .type == PythonCompiler::EvalResult::statement);
688
+ r = e.evaluate2 (" i" );
689
+ CHECK (r.ok );
690
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
691
+ CHECK (r.result .i32 == 5 );
692
+
693
+ r = e.evaluate2 (" j: i32 = 9" );
694
+ CHECK (r.ok );
695
+ CHECK (r.result .type == PythonCompiler::EvalResult::none);
696
+ r = e.evaluate2 (" j" );
697
+ CHECK (r.ok );
698
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
699
+ CHECK (r.result .i32 == 9 );
700
+
701
+ r = e.evaluate2 (" i + j" );
702
+ CHECK (r.ok );
703
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer4);
704
+ CHECK (r.result .i32 == 14 );
705
+ }
706
+
707
+ TEST_CASE (" PythonCompiler i64 expressions" ) {
708
+ CompilerOptions cu;
709
+ cu.po .disable_main = true ;
710
+ cu.emit_debug_line_column = false ;
711
+ cu.generate_object_code = false ;
712
+ cu.interactive = true ;
713
+ cu.po .runtime_library_dir = LCompilers::LPython::get_runtime_library_dir ();
714
+ PythonCompiler e (cu);
715
+ LCompilers::Result<PythonCompiler::EvalResult>
716
+
717
+ r = e.evaluate2 (" i64(1)" );
718
+ CHECK (r.ok );
719
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
720
+ CHECK (r.result .i64 == 1 );
721
+
722
+ r = e.evaluate2 (" i64(1) + i64(2)" );
723
+ CHECK (r.ok );
724
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
725
+ CHECK (r.result .i64 == 3 );
726
+
727
+ r = e.evaluate2 (" i64(1) - i64(2)" );
728
+ CHECK (r.ok );
729
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
730
+ CHECK (r.result .i64 == -1 );
731
+
732
+ r = e.evaluate2 (" i64(1) * i64(2)" );
733
+ CHECK (r.ok );
734
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
735
+ CHECK (r.result .i64 == 2 );
736
+
737
+ r = e.evaluate2 (" i64(3) ** i64(3)" );
738
+ CHECK (r.ok );
739
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
740
+ CHECK (r.result .i64 == 27 );
741
+
742
+ r = e.evaluate2 (" i64(4) // i64(2)" );
743
+ CHECK (r.ok );
744
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
745
+ CHECK (r.result .i64 == 2 );
746
+
747
+ r = e.evaluate2 (" i64(4) / i64(2)" );
748
+ CHECK (r.ok );
749
+ CHECK (r.result .type == PythonCompiler::EvalResult::real8);
750
+ CHECK (r.result .f64 == 2 );
751
+ }
752
+
753
+ TEST_CASE (" PythonCompiler i64 declaration" ) {
754
+ CompilerOptions cu;
755
+ cu.po .disable_main = true ;
756
+ cu.emit_debug_line_column = false ;
757
+ cu.generate_object_code = false ;
758
+ cu.interactive = true ;
759
+ cu.po .runtime_library_dir = LCompilers::LPython::get_runtime_library_dir ();
760
+ PythonCompiler e (cu);
761
+ LCompilers::Result<PythonCompiler::EvalResult>
762
+
763
+ r = e.evaluate2 (" i: i64" );
764
+ CHECK (r.ok );
765
+ CHECK (r.result .type == PythonCompiler::EvalResult::none);
766
+ r = e.evaluate2 (" i = i64(5)" );
767
+ CHECK (r.ok );
768
+ CHECK (r.result .type == PythonCompiler::EvalResult::statement);
769
+ r = e.evaluate2 (" i" );
770
+ CHECK (r.ok );
771
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
772
+ CHECK (r.result .i64 == 5 );
773
+
774
+ r = e.evaluate2 (" j: i64 = i64(9)" );
775
+ CHECK (r.ok );
776
+ CHECK (r.result .type == PythonCompiler::EvalResult::none);
777
+ r = e.evaluate2 (" j" );
778
+ CHECK (r.ok );
779
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
780
+ CHECK (r.result .i64 == 9 );
781
+
782
+ r = e.evaluate2 (" i + j" );
783
+ CHECK (r.ok );
784
+ CHECK (r.result .type == PythonCompiler::EvalResult::integer8);
785
+ CHECK (r.result .i64 == 14 );
623
786
}
0 commit comments