| #include "flang/Evaluate/expression.h" |
| #include "testing.h" |
| #include "flang/Evaluate/fold.h" |
| #include "flang/Evaluate/intrinsics.h" |
| #include "flang/Evaluate/tools.h" |
| #include "flang/Parser/message.h" |
| #include <cstdio> |
| #include <cstdlib> |
| #include <string> |
| |
| using namespace Fortran::evaluate; |
| |
| int main() { |
| using DefaultIntegerExpr = Expr<Type<TypeCategory::Integer, 4>>; |
| TEST(DefaultIntegerExpr::Result::AsFortran() == "INTEGER(4)"); |
| MATCH("666_4", DefaultIntegerExpr{666}.AsFortran()); |
| MATCH("-1_4", (-DefaultIntegerExpr{1}).AsFortran()); |
| auto ex1{ |
| DefaultIntegerExpr{2} + DefaultIntegerExpr{3} * -DefaultIntegerExpr{4}}; |
| MATCH("2_4+3_4*(-4_4)", ex1.AsFortran()); |
| Fortran::common::IntrinsicTypeDefaultKinds defaults; |
| auto intrinsics{Fortran::evaluate::IntrinsicProcTable::Configure(defaults)}; |
| FoldingContext context{ |
| Fortran::parser::ContextualMessages{nullptr}, defaults, intrinsics}; |
| ex1 = Fold(context, std::move(ex1)); |
| MATCH("-10_4", ex1.AsFortran()); |
| MATCH("1_4/2_4", (DefaultIntegerExpr{1} / DefaultIntegerExpr{2}).AsFortran()); |
| DefaultIntegerExpr a{1}; |
| DefaultIntegerExpr b{2}; |
| MATCH("1_4", a.AsFortran()); |
| a = b; |
| MATCH("2_4", a.AsFortran()); |
| MATCH("2_4", b.AsFortran()); |
| return testing::Complete(); |
| } |