#include "logval.h" #define BOOST_TEST_MODULE LogValTest #include #include #include using namespace std; BOOST_AUTO_TEST_CASE(Order) { LogVal a(-0.3); LogVal b(0.3); LogVal c(2.4); BOOST_CHECK_LT(a,b); BOOST_CHECK_LT(b,c); BOOST_CHECK_LT(a,c); BOOST_CHECK(b >= a); BOOST_CHECK(c >= a); BOOST_CHECK(c >= b); BOOST_CHECK(c >= c); BOOST_CHECK(b >= b); BOOST_CHECK(a >= a); } BOOST_AUTO_TEST_CASE(Negate) { LogVal x(-2.4); LogVal y(2.4); y.negate(); BOOST_CHECK_CLOSE(x.as_float(),y.as_float(), 1e-6); } BOOST_AUTO_TEST_CASE(Inverse) { LogVal x(1/2.4); LogVal y(2.4); BOOST_CHECK_CLOSE(x.as_float(),y.inverse().as_float(), 1e-6); } BOOST_AUTO_TEST_CASE(Minus) { LogVal x(12); LogVal y(2); LogVal z1 = x - y; LogVal z2 = x; z2 -= y; BOOST_CHECK_CLOSE(z1.as_float(), z2.as_float(), 1e-6); BOOST_CHECK_CLOSE(z1.as_float(), 10.0, 1e-6); BOOST_CHECK_CLOSE((y - x).as_float(), -10.0, 1e-6); } BOOST_AUTO_TEST_CASE(TestOps) { LogVal x(-12.12); LogVal y(x); cerr << x << endl; cerr << (x*y) << endl; cerr << (x*y + x) << endl; cerr << (x + x*y) << endl; cerr << log1p(-0.5) << endl; LogVal aa(0.2); LogVal bb(-0.3); cerr << (aa + bb) << endl; cerr << (bb + aa) << endl; BOOST_CHECK_CLOSE((aa + bb).as_float(), (bb + aa).as_float(), 1e-6); BOOST_CHECK_CLOSE((aa + bb).as_float(), -0.1, 1e-6); } BOOST_AUTO_TEST_CASE(TestSizes) { cerr << sizeof(LogVal) << endl; cerr << sizeof(LogVal) << endl; cerr << sizeof(void*) << endl; }