#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 #include #include using namespace Fortran::evaluate; int main() { using DefaultIntegerExpr = Expr>; 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(); }