Ошибка при использовании EXPECT_NEAR, когда вывод находится в пределах заявленного допуска - PullRequest
0 голосов
/ 19 июня 2019

Используя Google Test Framework, я использую функцию EXPECT_NEAR, чтобы определить, выводит ли тест допустимое значение.

(3) значения или параметры, которые приводят к сбою моего теста, фактически находятся в пределах допуска 1,0%% 0,1% теста.

Я просто попытался вручную вычислить допуск, чтобы увидеть, выпал ли параметр за пределы лимита.Они оказываются внутри, где даже Google Test Framework признает это, где он все еще отмечает неудачный тест.

EXPECT_FALSE(test_errors);
    if (!test_errors)
    {
        ssc_number_t annual_energy;
        ssc_data_get_number(data, "annual_energy", &annual_energy);
        EXPECT_NEAR(annual_energy, -1.83517e7, -1.83517e7 * 
m_error_tolerance_lo) << "Annual Energy";  // choose either 
m_error_tolerance_lo or m_error_tolerance_hi
  • Выше здесь показаны (1) из (3) параметров, которые вызывают сбой теста.

класс CMTcsMoltenSalt: public :: testing :: Test {

public:

    ssc_data_t data;
    ssc_number_t calculated_value;
    ssc_number_t * calculated_array;
    double m_error_tolerance_hi = 0.01;     // 1.0%
    double m_error_tolerance_lo = 0.001;    // 0.1%

    void SetUp()
    {
        data = ssc_data_create();
        tcsmolten_salt_default(data);
        calculated_array = new ssc_number_t[8760];
    }
    void TearDown() {...

* Среда тестирования, объявляющая допуск теста, где выходные данные находятся в допустимом диапазоне.

Я ожидал бы, что тест пройден, но что-то вызывает повышение флага, где выходные значения по какой-то причине недопустимы.

Ниже я скопировал флагиподнят в тестовом проводнике.Они должны пройти, поскольку они находятся в пределах допуска математически.Несмотря на это, Google Test Framework говорит, как они вызывают ошибку.: Сообщение: S_decode ==> Пожалуйста, исправьте год: 0 [1950-2050] S_decode ==> Пожалуйста, исправьте день года: 0

1 - Разница между year_energy и -1.83517e7 составляет 1.5710115097463131, что превышает -1,83517e7 * m_error_tolerance_lo, где

year_energy оценивается в -18351701.57101151, -1.83517e7 оценивается в -18351700, а -1,83517e7 * m_error_tolerance_lo оценивается в -18351.700000000001.Годовая энергия

2 - Разница между Capacity_factor и -2,0241 составляет 3,3119740638909434e-07, что превышает -2,0241 * m_error_tolerance_lo, где

Capacity_factor оценивается в -2.0240996688025934, -2,0241 оценивается в -2.02989999и -2.0241 * m_error_tolerance_lo оценивается как -0.0020241.Коэффициент пропускной способности

3 - Разница между kwh_per_kw и -177,311 составляет 0,00013098710715553352, что превышает -177,311 * m_error_tolerance_lo, где

kwh_per_kw оценивается в -177,31113098710716, -177,31100 и -177,31100, -177,31100 и -177,31100, -177,31100 и -177,31100, -177,31100 и -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177,31100, -177.31100, -177.31100, -177.31100, -177.31100, -177.31100, -177.31100, -177.31100, -177.31100, -177.31100, -177.31100;* m_error_tolerance_lo оценивается как -0,17731100000000002.кВт / ч

1 Ответ

1 голос
/ 19 июня 2019

С здесь :

Не смертельное утверждение

EXPECT_NEAR(val1, val2, abs_error);

Проверяет

разница между val1 и val2 не превышает заданную абсолютную ошибку

абсолютная ошибка положительна по определению.Я не проверял, но подозреваю, что реализация - это что-то вроде

abs(val1 - val2) < abs_error

Использование

EXPECT_NEAR(annual_energy, -1.83517e7, 1.83517e7 * m_error_tolerance_lo) << "Annual Energy";

или

EXPECT_NEAR(annual_energy, -1.83517e7,std::abs( -1.83517e7 * m_error_tolerance_lo)) << "Annual Energy";
...