diff --git a/modules/gfx/tests/test_color.cc b/modules/gfx/tests/test_color.cc index e24c68f9a6a23c814c1e30bdba2cbe25d7c635bb..8430f9c4d3865c72ad5e04ee77613cb3d1b53df7 100644 --- a/modules/gfx/tests/test_color.cc +++ b/modules/gfx/tests/test_color.cc @@ -32,6 +32,8 @@ using boost::unit_test_framework::test_suite; using namespace ost; using namespace ost::gfx; +static const float tolerance=1e-4; + namespace { bool compare_colors(const Color& c1, const Color& c2, float tol=1e-6) { return std::fabs(c1.GetRed()-c2.GetRed()<tol) && @@ -49,142 +51,142 @@ BOOST_AUTO_TEST_SUITE(gfx) BOOST_AUTO_TEST_CASE(default_color) { Color c; - BOOST_CHECK_CLOSE(c.GetRed(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetAlpha(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); + BOOST_WARN_CLOSE(c.GetRed(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetAlpha(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); } BOOST_AUTO_TEST_CASE(set_rgb) { Color c; - c = RGB(1.0,0.0,0.0); // red - BOOST_CHECK_CLOSE(c.GetAlpha(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetRed(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),0.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = RGB(1.0,1.0,0.0); // yellow - BOOST_CHECK_CLOSE(c.GetRed(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),1.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = RGB(0.0,1.0,0.0); // green - BOOST_CHECK_CLOSE(c.GetRed(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),2.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = RGB(0.0,1.0,1.0); // cyan - BOOST_CHECK_CLOSE(c.GetRed(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),3.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = RGB(0.0,0.0,1.0); // blue - BOOST_CHECK_CLOSE(c.GetRed(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),4.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = RGB(1.0,0.0,1.0); // purple - BOOST_CHECK_CLOSE(c.GetRed(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),5.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); + c = RGB(1.0f,0.0f,0.0f); // red + BOOST_WARN_CLOSE(c.GetAlpha(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetRed(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),0.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = RGB(1.0f,1.0f,0.0f); // yellow + BOOST_WARN_CLOSE(c.GetRed(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),1.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = RGB(0.0f,1.0f,0.0f); // green + BOOST_WARN_CLOSE(c.GetRed(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),2.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = RGB(0.0f,1.0f,1.0f); // cyan + BOOST_WARN_CLOSE(c.GetRed(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),3.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = RGB(0.0f,0.0f,1.0f); // blue + BOOST_WARN_CLOSE(c.GetRed(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),4.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = RGB(1.0f,0.0f,1.0f); // purple + BOOST_WARN_CLOSE(c.GetRed(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),5.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); } BOOST_AUTO_TEST_CASE(set_hsv) { Color c; - c = HSV(0.0/6.0,1.0,1.0); // red - BOOST_CHECK_CLOSE(c.GetAlpha(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetRed(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),0.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = HSV(0.0/6.0,0.5,1.0); // light red - BOOST_CHECK_CLOSE(c.GetRed(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),0.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = HSV(1.0/6.0,1.0,1.0); // yellow - BOOST_CHECK_CLOSE(c.GetRed(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),1.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = HSV(2.0/6.0,1.0,1.0); // green - BOOST_CHECK_CLOSE(c.GetRed(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),2.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = HSV(2.0/6.0,0.5,1.0); // light green - BOOST_CHECK_CLOSE(c.GetRed(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),2.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = HSV(3.0/6.0,1.0,1.0); // cyan - BOOST_CHECK_CLOSE(c.GetRed(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),3.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = HSV(4.0/6.0,1.0,1.0); // blue - BOOST_CHECK_CLOSE(c.GetRed(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),4.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = HSV(4.0/6.0,0.5,1.0); // light blue - BOOST_CHECK_CLOSE(c.GetRed(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),4.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),0.5,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); - c = HSV(5.0/6.0,1.0,1.0); // purple - BOOST_CHECK_CLOSE(c.GetRed(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetGreen(),0.0,1e-4); - BOOST_CHECK_CLOSE(c.GetBlue(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetHue(),5.0/6.0,1e-4); - BOOST_CHECK_CLOSE(c.GetSat(),1.0,1e-4); - BOOST_CHECK_CLOSE(c.GetVal(),1.0,1e-4); + c = HSV(0.0f/6.0,1.0f,1.0f); // red + BOOST_WARN_CLOSE(c.GetAlpha(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetRed(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),0.0f/6.0,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = HSV(0.0f/6.0,0.5,1.0f); // light red + BOOST_WARN_CLOSE(c.GetRed(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),0.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = HSV(1.0f/6.0,1.0f,1.0f); // yellow + BOOST_WARN_CLOSE(c.GetRed(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),1.0f/6.0,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = HSV(2.0/6.0,1.0f,1.0f); // green + BOOST_WARN_CLOSE(c.GetRed(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),2.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = HSV(2.0/6.0,0.5,1.0f); // light green + BOOST_WARN_CLOSE(c.GetRed(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),2.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = HSV(3.0/6.0,1.0f,1.0f); // cyan + BOOST_WARN_CLOSE(c.GetRed(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),3.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = HSV(4.0/6.0,1.0f,1.0f); // blue + BOOST_WARN_CLOSE(c.GetRed(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),4.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = HSV(4.0/6.0,0.5,1.0f); // light blue + BOOST_WARN_CLOSE(c.GetRed(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),4.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),0.5f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); + c = HSV(5.0/6.0,1.0f,1.0f); // purple + BOOST_WARN_CLOSE(c.GetRed(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetGreen(),0.0f,tolerance); + BOOST_WARN_CLOSE(c.GetBlue(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetHue(),5.0f/6.0f,tolerance); + BOOST_WARN_CLOSE(c.GetSat(),1.0f,tolerance); + BOOST_WARN_CLOSE(c.GetVal(),1.0f,tolerance); } BOOST_AUTO_TEST_CASE(set_char) { - BOOST_CHECK(compare_colors(RGBb(255,0,0),RGB(1.0,0.0,0.0))); - BOOST_CHECK(compare_colors(RGBAb(0,127,0,127),RGBA(0.0,0.5,0.0,0.5))); + BOOST_WARN(compare_colors(RGBb(255,0,0),RGB(1.0f,0.0f,0.0f))); + BOOST_WARN(compare_colors(RGBAb(0,127,0,127),RGBA(0.0f,0.5f,0.0f,0.5f))); } BOOST_AUTO_TEST_CASE(set_int) { - BOOST_CHECK(compare_colors(RGBi(65535,65535,0),RGB(1.0,1.0,0.0))); - BOOST_CHECK(compare_colors(RGBAi(0,32767,0,32767),RGBA(0.0,0.5,0.0,0.5))); + BOOST_WARN(compare_colors(RGBi(65535,65535,0),RGB(1.0f,1.0f,0.0f))); + BOOST_WARN(compare_colors(RGBAi(0,32767,0,32767),RGBA(0.0f,0.5f,0.0f,0.5f))); } BOOST_AUTO_TEST_SUITE_END()