Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost.Test: floating point comparison using absolute diference
From: Raffi Enficiaud (raffi.enficiaud_at_[hidden])
Date: 2017-12-30 22:28:28


Le 30.12.17 à 14:41, Georgios Sermaidis via Boost-users a écrit :
> Thank you. Is there a way to achieve this when comparing collections,
> i.e. when using boost::test_tools::per_element()?
>
>
>> On 29 Dec 2017, at 19:37, Raffi Enficiaud via Boost-users
>> <boost-users_at_[hidden] <mailto:boost-users_at_[hidden]>> wrote:
>>
>> Le 29.12.17 à 17:33, Georgios Sermaidis via Boost-users a écrit :
>>> Hi all,
>>>
>>> I am trying to find a way to make the boost unit test framework use an
>>> absolute difference for floating point comparison instead of the
>>> relative difference. 
>>> I searched the documentation to try to find a suitable decorator but
>>> couldn’t find anything. Any help is much appreciated!
>>>
>>> #defineBOOST_TEST_MODULEexample
>>>
>>> #include<boost/test/included/unit_test.hpp>
>>>
>>>
>>> //boost::unit_test::toleranceusesrelativedifference and hence this test
>>> will pass; 
>>>
>>> // isthereanythingIcanusehereto indicateabsolutedifference?
>>>
>>> BOOST_AUTO_TEST_CASE(my_test,*boost::unit_test::tolerance(0.1))
>>>
>>> {
>>>
>>>
>>> BOOST_TEST(10.1==10.3);
>>>
>>> }
>>
>> What you want to do is discussed here in the doc:
>> http://www.boost.org/doc/libs/1_66_0/libs/test/doc/html/boost_test/testing_tools/extended_comparison/floating_point/floating_points_comparison_impl.html
>>
>> You may just use
>>
>> BOOST_TEST(left - right == .0, boost::unit_test::tolerance(0.1));
>>
>> and I think it should use absolute tolerance on the absolute value of
>> left-right.
>>
>> If nothing works, there is always the good old comparison:
>> BOOST_TEST((std::abs(left - right) < 0.1))
>>
>> Note the double parenthesis, in this case BOOST_TEST will see only the
>> evaluation of the expression inside, which is cast to bool (less
>> elegant, but should work as last resort).
>>
>> Raffi

Apart from creating a collection of differences that you compare with a
collection of zeros (that can be wrap up in helper functions), I do not
see a way to use this facility as is. Looping over the elements would
certainly be the most maintainable and easy to understand choice.

Raffi


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net