2010-01-21 3 views
5

Ich bin mit dem Boost-:: Test Bibliothek, und ich versuche, wenn ein tatsächlicher Prozentwert zu überprüfen, ist nahe den erwarteten Wert:Problem BOOST_CHECK_CLOSE_FRACTION

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

Aus irgendeinem Grunde diese Prüfung fehlschlägt, auch wenn die Werte sind nahe genug:

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

Ist das ein Problem mit Boost-oder einem Problem mit, wie ich Boost-verwenden?

Antwort

3

Nach einigen Tests stellt sich heraus, dass die Dokumentation für BOOST_CHECK_CLOSE_FRACTION falsch ist. Die Toleranz sollte als Bruchteil des erwarteten Werts angegeben werden. So

, 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

Ich würde Ihnen vorschlagen, zu prüfen, wenn es einen verwandten Bericht in Boost Trac gibt und wenn nicht, melde ihn dort oder sende deinen Kommentar an die Boost-Mailingliste. – mloskot

2

Es ist ein Problem mit der Verwendung von Boost.

Das letzte Argument ist eine prozentuale Toleranz, kein absoluter Varianzwert. 5% von 0,4 sind 0,02.

0

Offensichtlich BOOST_CHECK_CLOSE und BOOST_CHECK_CLOSE_FRACTION funktioniert nicht, wenn Sie überprüfen, ob etwas in der Nähe von 0 ist, dann können Sie verwenden:

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