Googletest с Fortran - изменение глобальных переменных или переменных уровня модуля - PullRequest
0 голосов
/ 26 июня 2019

Я использую тесты Google с устаревшим кодом Fortran, который скомпилирован в dll. Код широко использует структуру модуля 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);
}

Первый тест действует так, как я ожидаю. Он принимает два аргумента (входной и выходной), и я могу проверить вывод по ссылке.

Во втором тесте у меня проблемы. В коде Фортрана есть глобальная переменная с именем tcycle, которая инициализируется значением 0,0, но используется в подпрограмме (наряду с другими). Есть ли способ установить значение tcycle, используя тестовый фреймворк Google для тестового примера, например, какую-нибудь версию с двумя закомментированными строками?

Я понимаю, что один из способов решения этой проблемы - пройти через код и вручную установить для всех начальных значений подходящие значения для тестовых случаев. Но так как код довольно большой (более 100 000 строк), я бы предпочел разобраться с ним через тестовую среду, если это возможно, и просто предоставить значения.

Любая помощь будет приветствоваться.

...