2010-01-21 6 views
5

estoy usando la biblioteca Boost :: prueba, y estoy tratando de comprobar si un valor real por ciento está cerca del valor esperado:Problema con BOOST_CHECK_CLOSE_FRACTION

BOOST_CHECK_CLOSE_FRACTION(
    items[i].ExpectedPercent, 
    items[i].ActualCount/totalCount, 
    0.05); 

Por alguna razón esta comprobación falla, incluso cuando los valores son lo suficientemente cerca:

difference between items[i].ExpectedPercent{0.40000000000000002} 
    and items[i].ActualCount/totalReturned{0.42999999999999999} 
            exceeds 0.050000000000000003 

es éste un problema con Boost o un problema con la forma en que estoy usando Boost?

Respuesta

3

Después de algunas pruebas, resulta que la documentación de BOOST_CHECK_CLOSE_FRACTION es incorrecta. La tolerancia debe especificarse como una fracción del valor esperado.

Así, TFAE:

BOOST_CHECK(abs(x - y) < (min(x, y) * 0.1)); 
BOOST_CHECK_CLOSE(x, y, 10); 
BOOST_CHECK_CLOSE_FRACTION(x, y, 0.1); 
+1

le sugeriría para comprobar si hay un informe relacionado en Boost Trac y, de no ser así, denúncielo allí o envíe su comentario a la lista de correo de Boost. – mloskot

2

Es un problema con la forma en que usa boost.

El último argumento es un porcentaje de tolerancia, no un valor de varianza absoluta. 5% de 0.4 es 0.02.

0

Obviamente BOOST_CHECK_CLOSE y BOOST_CHECK_CLOSE_FRACTION no funcionará si comprueba si algo se acerca a 0. A continuación, puede utilizar:

BOOST_CHECK(abs(x - y) < accurancy);