| 1 | #include "flang/Evaluate/expression.h" |
| 2 | #include "flang/Evaluate/fold.h" |
| 3 | #include "flang/Evaluate/intrinsics.h" |
| 4 | #include "flang/Evaluate/target.h" |
| 5 | #include "flang/Evaluate/tools.h" |
| 6 | #include "flang/Parser/message.h" |
| 7 | #include "flang/Testing/testing.h" |
| 8 | #include <cstdio> |
| 9 | #include <cstdlib> |
| 10 | #include <string> |
| 11 | |
| 12 | using namespace Fortran::evaluate; |
| 13 | |
| 14 | int main() { |
| 15 | using DefaultIntegerExpr = Expr<Type<TypeCategory::Integer, 4>>; |
| 16 | TEST(DefaultIntegerExpr::Result::AsFortran() == "INTEGER(4)" ); |
| 17 | MATCH("666_4" , DefaultIntegerExpr{666}.AsFortran()); |
| 18 | MATCH("-1_4" , (-DefaultIntegerExpr{1}).AsFortran()); |
| 19 | auto ex1{ |
| 20 | DefaultIntegerExpr{2} + DefaultIntegerExpr{3} * -DefaultIntegerExpr{4}}; |
| 21 | MATCH("2_4+3_4*(-4_4)" , ex1.AsFortran()); |
| 22 | Fortran::common::IntrinsicTypeDefaultKinds defaults; |
| 23 | auto intrinsics{Fortran::evaluate::IntrinsicProcTable::Configure(defaults)}; |
| 24 | TargetCharacteristics targetCharacteristics; |
| 25 | Fortran::common::LanguageFeatureControl languageFeatures; |
| 26 | std::set<std::string> tempNames; |
| 27 | FoldingContext context{Fortran::parser::ContextualMessages{nullptr}, defaults, |
| 28 | intrinsics, targetCharacteristics, languageFeatures, tempNames}; |
| 29 | ex1 = Fold(context, std::move(ex1)); |
| 30 | MATCH("-10_4" , ex1.AsFortran()); |
| 31 | MATCH("1_4/2_4" , (DefaultIntegerExpr{1} / DefaultIntegerExpr{2}).AsFortran()); |
| 32 | DefaultIntegerExpr a{1}; |
| 33 | DefaultIntegerExpr b{2}; |
| 34 | MATCH("1_4" , a.AsFortran()); |
| 35 | a = b; |
| 36 | MATCH("2_4" , a.AsFortran()); |
| 37 | MATCH("2_4" , b.AsFortran()); |
| 38 | return testing::Complete(); |
| 39 | } |
| 40 | |