带有Fortran的Googletest-修改全局或模块级变量

时间:2019-06-26 19:31:06

标签: unit-testing fortran googletest

我正在将Google测试与已编译为dll的旧版Fortran代码一起使用。该代码广泛使用包括许多模块化级别变量的Fortran模块结构。该代码还包含一组在整个代码中使用use语句共享的全局变量。对于优化求解程序的第一次迭代,全局变量被初始化为合理的值(有时为零)。

我能够使用Google测试来测试仅使用C绑定获取参数的子例程和函数,但仅用于不使用模块化或全局变量的子例程。但是,由于大多数代码都使用这些共享变量,所以我想为特定测试设置它们的值,因为它们通常不作为参数传递。

TEST(Availability, calc_u_unplanned_hcd) { 
   double a = 0.0;
   double b;
   availability_calc_u_unplanned_hcd(&a, &b);
   EXPECT_NEAR(0.05, b, 0.01);
}

TEST(Availability, calc_u_unplanned_divertor) {
   int outfile = 0.0;
   int iprint = 0.0;
   double result;
   // double tcycle;
   // tcycle = 8.8e3;
   availability_calc_u_unplanned_divertor(&outfile, &iprint, &result);
   EXPECT_NEAR(0.01, result, 0.001);
}

第一次测试符合我的预期。它有两个参数(输入和输出),我可以对照参考测试输出。

第二个测试是我遇到问题的地方。在Fortran代码中,存在一个名为tcycle的全局变量,该变量已初始化为0.0,但在子例程(以及其他例程)中使用。是否可以使用Google测试框架为测试用例设置tcycle的值,例如某些版本的两条注释行?

我意识到解决此问题的一种方法是遍历代码并手动将所有初始值设置为测试用例的合适值。但是由于代码相当大(超过100,000行),所以我宁愿通过测试框架来处理它,并且只提供值。

任何帮助都是最欢迎的。

0 个答案:

没有答案