suma
No puedo entender por qué falló el caso de prueba en caso de sumar números dobles o flotantes. Funciona muy bien para el tipo de datos enteros.
//el método en simple_method.h
double sum ( double a, double b)
{
double res = a+b;
return res;
}
// el caso de prueba para este método
TEST(simpleSum, sumOfFloat)
{
EXPECT_EQ(4.56, sum(0.56, 4.0));
}
// la salida es
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from simpleSum
[ RUN ] simpleSum.sumOfFloat
/home/pcadmin/Desktop/so/so3/simple_method_test.cpp:7: Failure
Value of: sum(0.56, 4.0)
Actual: 4.56
Expected: 4.56
[ FAILED ] simpleSum.sumOfFloat (0 ms)
[----------] 1 test from simpleSum (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[ PASSED ] 0 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] simpleSum.sumOfFloat
1 FAILED TEST
congusbongo
Usar EXPECT_NEAR
o el DoubleEq
emparejador en su lugar. Las operaciones de coma flotante pueden dar lugar a errores de redondeo, lo que hace que los resultados sean ligeramente diferentes.
-
EXPECT_NEAR
tiene un enlace roto. Pude encontrar esta parte de la documentación en su lugar: github.com/google/googletest/blob/master/googletest/docs/…– kyriakosSt
10 oct 2018 a las 15:11
-
Me abstuve porque no sabía si podrías hacer funcionar el enlace original.
– kyriakosSt
11 de octubre de 2018 a las 9:07
-
Solo para mi
EXPECT_NEAR
trabajó. Incluso cuando la diferencia era menor que10^(-5)
“EXPECT_DOUBLE_EQ` falló– joepol
15 de marzo de 2020 a las 12:44
jinuk kim
Consulte la documentación para Comparación de punto flotante
EXPECT_EQ
utiliza coincidencia exacta. Pero no puedes hacer coincidir exactamente dos números flotantes. (al menos con facilidad).
Puedes usar EXPECT_FLOAT_EQ
o EXPECT_DOUBLE_EQ
. (con límites heurísticos) Además, puede usar EXPECT_NEAR
con límites específicos.
De https://testing.googleblog.com/2008/10/tott-floating-point-comparison.html
Al comparar valores de coma flotante, la comprobación de la igualdad puede generar resultados inesperados. Los errores de redondeo pueden llevar a un resultado cercano al esperado, pero no igual. Como consecuencia, una aserción puede fallar al verificar la igualdad de dos cantidades de punto flotante incluso si el programa se implementa correctamente.
El marco de prueba de Google C++ proporciona funciones para comparar dos cantidades de punto flotante hasta una precisión dada.
ASSERT_FLOAT_EQ(expected, actual);
ASSERT_DOUBLE_EQ(expected, actual);
EXPECT_FLOAT_EQ(expected, actual);
EXPECT_DOUBLE_EQ(expected, actual);
En tu caso,
TEST(simpleSum, sumOfFloat)
{
EXPECT_DOUBLE_EQ(4.56, sum(0.56, 4.0));
}
-
lo que no me gusta de EXPECT_DOUBLE_EQ() es que no puede proporcionar un error delta. A veces, una prueba aún fallará debido a un error de punto flotante, especialmente un error acumulado.
– voxoide
10 de julio de 2020 a las 17:39
-
“El marco de prueba de Google C ++ proporciona funciones para comparar dos cantidades de punto flotante hasta una precisión dada”. ¿Hay algún documento para la precisión?
– Fan de Ziqi
16 de julio a las 1:16
Esto es solo un error en Googletest. La salida de texto debería probar la falla, pero el formato no se especifica con precisión.