Я использую тесты 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 строк), я бы предпочел разобраться с ним через тестовую среду, если это возможно, и просто предоставить значения.
Любая помощь будет приветствоваться.