diff --git a/src/Magnum/Math/Test/ColorTest.cpp b/src/Magnum/Math/Test/ColorTest.cpp index b5d27db29..c520aed89 100644 --- a/src/Magnum/Math/Test/ColorTest.cpp +++ b/src/Magnum/Math/Test/ColorTest.cpp @@ -82,17 +82,12 @@ struct ColorTest: Corrade::TestSuite::Tester { void colors(); - void fromHue(); - void fromSaturation(); - void fromValue(); - void hue(); void saturation(); void value(); - void hsv(); - void hsvOverflow(); - void hsvAlpha(); + void fromHsvHueOverflow(); + void fromHsvDefaultAlpha(); void swizzleType(); void debug(); @@ -127,17 +122,12 @@ ColorTest::ColorTest() { &ColorTest::colors, - &ColorTest::fromHue, - &ColorTest::fromSaturation, - &ColorTest::fromValue, - &ColorTest::hue, &ColorTest::saturation, &ColorTest::value, - &ColorTest::hsv, - &ColorTest::hsvOverflow, - &ColorTest::hsvAlpha, + &ColorTest::fromHsvHueOverflow, + &ColorTest::fromHsvDefaultAlpha, &ColorTest::swizzleType, &ColorTest::debug, @@ -370,75 +360,154 @@ void ColorTest::colors() { CORRADE_COMPARE(Color4ub::yellow(), Color4ub(255, 255, 0, 255)); } -void ColorTest::fromHue() { - CORRADE_COMPARE(Color3ub::fromHsv(27.0_degf, 1.0f, 1.0f), Color3ub(255, 114, 0)); - CORRADE_COMPARE(Color3ub::fromHsv(86.0_degf, 1.0f, 1.0f), Color3ub(144, 255, 0)); - CORRADE_COMPARE(Color3ub::fromHsv(134.0_degf, 1.0f, 1.0f), Color3ub(0, 255, 59)); - CORRADE_COMPARE(Color3ub::fromHsv(191.0_degf, 1.0f, 1.0f), Color3ub(0, 208, 255)); - CORRADE_COMPARE(Color3ub::fromHsv(269.0_degf, 1.0f, 1.0f), Color3ub(123, 0, 255)); - CORRADE_COMPARE(Color3ub::fromHsv(317.0_degf, 1.0f, 1.0f), Color3ub(255, 0, 182)); -} - void ColorTest::hue() { - CORRADE_COMPARE(Color3ub(255, 115, 0).hue(), 27.058824_degf); - CORRADE_COMPARE(Color3ub(145, 255, 0).hue(), 85.882353_degf); - CORRADE_COMPARE(Color3ub(0, 255, 60).hue(), 134.11765_degf); - CORRADE_COMPARE(Color3ub(0, 208, 255).hue(), 191.05882_degf); - CORRADE_COMPARE(Color3ub(123, 0, 255).hue(), 268.94117_degf); - CORRADE_COMPARE(Color3ub(255, 0, 183).hue(), 316.94117_degf); -} - -void ColorTest::fromSaturation() { - CORRADE_COMPARE(Color3ub::fromHsv(0.0_degf, 0.702f, 1.0f), Color3ub(255, 75, 75)); + CORRADE_COMPARE(Color3::fromHsv( 27.0_degf, 1.0f, 1.0f), (Color3{1.0f, 0.45f, 0.0f})); + CORRADE_COMPARE(Color3::fromHsv( 86.0_degf, 1.0f, 1.0f), (Color3{0.566667f, 1.0f, 0.0f})); + CORRADE_COMPARE(Color3::fromHsv(134.0_degf, 1.0f, 1.0f), (Color3{0.0f, 1.0f, 0.233333f})); + CORRADE_COMPARE(Color3::fromHsv(191.0_degf, 1.0f, 1.0f), (Color3{0.0f, 0.816667f, 1.0f})); + CORRADE_COMPARE(Color3::fromHsv(269.0_degf, 1.0f, 1.0f), (Color3{0.483333f, 0.0f, 1.0f})); + CORRADE_COMPARE(Color3::fromHsv(317.0_degf, 1.0f, 1.0f), (Color3{1.0f, 0.0f, 0.716667f})); + + CORRADE_COMPARE((Color3{1.0f, 0.45f, 0.0f}).hue(), 27.0_degf); + CORRADE_COMPARE((Color3{0.566667f, 1.0f, 0.0f}).hue(), 86.0_degf); + CORRADE_COMPARE((Color3{0.0f, 1.0f, 0.233333f}).hue(), 134.0_degf); + CORRADE_COMPARE((Color3{0.0f, 0.816667f, 1.0f}).hue(), 191.0_degf); + CORRADE_COMPARE((Color3{0.483333f, 0.0f, 1.0f}).hue(), 269.0_degf); + CORRADE_COMPARE((Color3{1.0f, 0.0f, 0.716667f}).hue(), 317.0_degf); + + /* RGBA */ + CORRADE_COMPARE(Color4::fromHsv(27.0_degf, 1.0f, 1.0f, 0.175f), (Color4{1.0f, 0.45f, 0.0f, 0.175f})); + CORRADE_COMPARE((Color4{1.0f, 0.45f, 0.0f, 0.175f}).hue(), 27.0_degf); + + /* Integral -- little precision loss */ + CORRADE_COMPARE(Math::Color3::fromHsv(27.0_degf, 1.0f, 1.0f), + (Math::Color3{65535, 29490, 0})); + CORRADE_COMPARE(Math::Color4::fromHsv(27.0_degf, 1.0f, 1.0f, 15239), + (Math::Color4{65535, 29490, 0, 15239})); + CORRADE_COMPARE((Math::Color3{65535, 29490, 0}).hue(), 26.9993_degf); + CORRADE_COMPARE((Math::Color4{65535, 29490, 0, 15239}.hue()), 26.9993_degf); } void ColorTest::saturation() { - CORRADE_COMPARE(Color3ub(255, 76, 76).saturation(), 0.701961f); - CORRADE_COMPARE(Color3ub().saturation(), 0.0f); -} - -void ColorTest::fromValue() { - CORRADE_COMPARE(Color3ub::fromHsv(0.0_degf, 1.0f, 0.522f), Color3ub(133, 0, 0)); + CORRADE_COMPARE(Color3::fromHsv(0.0_degf, 0.702f, 1.0f), (Color3{1.0f, 0.298f, 0.298f})); + CORRADE_COMPARE((Color3{1.0f, 0.298f, 0.298f}).saturation(), 0.702f); + + /* Extremes */ + CORRADE_COMPARE((Color3{0.0f, 0.0f, 0.0f}).saturation(), 0.0f); + CORRADE_COMPARE((Color3{0.0f, 1.0f, 0.0f}).saturation(), 1.0f); + + /* RGBA */ + CORRADE_COMPARE(Color4::fromHsv(0.0_degf, 0.702f, 1.0f, 0.175f), (Color4{1.0f, 0.298f, 0.298f, 0.175f})); + CORRADE_COMPARE((Color4{1.0f, 0.298f, 0.298f, 0.175f}).saturation(), 0.702f); + + /* Integral -- little precision loss */ + CORRADE_COMPARE(Math::Color3::fromHsv(0.0_degf, 0.702f, 1.0f), + (Math::Color3{65535, 19529, 19529})); + CORRADE_COMPARE(Math::Color4::fromHsv(0.0_degf, 0.702f, 1.0f, 15239), + (Math::Color4{65535, 19529, 19529, 15239})); + CORRADE_COMPARE((Math::Color3{65535, 19529, 19529}.saturation()), 0.702007f); + CORRADE_COMPARE((Math::Color4{65535, 19529, 19529, 15239}.saturation()), 0.702007f); } void ColorTest::value() { - CORRADE_COMPARE(Color3ub(133, 0, 0).value(), 0.521569f); + CORRADE_COMPARE(Color3::fromHsv(0.0_degf, 1.0f, 0.522f), (Color3{0.522f, 0.0f, 0.0f})); + CORRADE_COMPARE((Color3{0.522f, 0.0f, 0.0f}).value(), 0.522f); + + /* Extremes */ + CORRADE_COMPARE((Color3{0.0f, 0.0f, 0.0f}).value(), 0.0f); + CORRADE_COMPARE((Color3{0.0f, 1.0f, 0.0f}).value(), 1.0f); + + /* RGBA */ + CORRADE_COMPARE(Color4::fromHsv(0.0_degf, 1.0f, 0.522f, 0.175f), (Color4{0.522f, 0.0f, 0.0f, 0.175f})); + CORRADE_COMPARE((Color4{0.522f, 0.0f, 0.0f, 0.175f}).value(), 0.522f); + + /* Integral -- little precision loss */ + CORRADE_COMPARE(Math::Color3::fromHsv(0.0_degf, 1.0f, 0.522f), + (Math::Color3{34209, 0, 0})); + CORRADE_COMPARE(Math::Color4::fromHsv(0.0_degf, 1.0f, 0.522f, 15239), + (Math::Color4{34209, 0, 0, 15239})); + CORRADE_COMPARE((Math::Color3{34209, 0, 0}.value()), 0.521996f); + CORRADE_COMPARE((Math::Color4{34209, 0, 0, 15239}.value()), 0.521996f); } void ColorTest::hsv() { - CORRADE_COMPARE(Color3ub::fromHsv(230.0_degf, 0.749f, 0.427f), Color3ub(27, 40, 108)); + CORRADE_COMPARE(Color3::fromHsv(std::make_tuple(230.0_degf, 0.749f, 0.427f)), + (Color3{0.107177f, 0.160481f, 0.427f})); + CORRADE_COMPARE(Color3::fromHsv(230.0_degf, 0.749f, 0.427f), + (Color3{0.107177f, 0.160481f, 0.427f})); Deg hue; Float saturation, value; - std::tie(hue, saturation, value) = Color3ub(27, 41, 109).toHsv(); - CORRADE_COMPARE(hue, 229.756106_degf); - CORRADE_COMPARE(saturation, 0.752294f); - CORRADE_COMPARE(value, 0.427451f); + std::tie(hue, saturation, value) = Color3{0.107177f, 0.160481f, 0.427f}.toHsv(); + CORRADE_COMPARE(hue, 230.0_degf); + CORRADE_COMPARE(saturation, 0.749f); + CORRADE_COMPARE(value, 0.427f); + + /* RGBA */ + CORRADE_COMPARE(Color4::fromHsv(std::make_tuple(230.0_degf, 0.749f, 0.427f), 0.175f), + (Color4{0.107177f, 0.160481f, 0.427f, 0.175f})); + CORRADE_COMPARE(Color4::fromHsv(230.0_degf, 0.749f, 0.427f, 0.175f), + (Color4{0.107177f, 0.160481f, 0.427f, 0.175f})); + + std::tie(hue, saturation, value) = Color4{0.107177f, 0.160481f, 0.427f, 0.175f}.toHsv(); + CORRADE_COMPARE(hue, 230.0_degf); + CORRADE_COMPARE(saturation, 0.749f); + CORRADE_COMPARE(value, 0.427f); + + /* Integral -- little precision loss */ + CORRADE_COMPARE(Math::Color3::fromHsv(std::make_tuple(230.0_degf, 0.749f, 0.427f)), + (Math::Color3{7023, 10517, 27983})); + CORRADE_COMPARE(Math::Color3::fromHsv(230.0_degf, 0.749f, 0.427f), + (Math::Color3{7023, 10517, 27983})); + CORRADE_COMPARE(Math::Color4::fromHsv(std::make_tuple(230.0_degf, 0.749f, 0.427f), 15239), + (Math::Color4{7023, 10517, 27983, 15239})); + CORRADE_COMPARE(Math::Color4::fromHsv(230.0_degf, 0.749f, 0.427f, 15239), + (Math::Color4{7023, 10517, 27983, 15239})); + + std::tie(hue, saturation, value) = Math::Color3{7023, 10517, 27983}.toHsv(); + CORRADE_COMPARE(hue, 230.0_degf); + CORRADE_COMPARE(saturation, 0.749026f); + CORRADE_COMPARE(value, 0.426993f); + + std::tie(hue, saturation, value) = Math::Color4{7023, 10517, 27983, 15239}.toHsv(); + CORRADE_COMPARE(hue, 230.0_degf); + CORRADE_COMPARE(saturation, 0.749026f); + CORRADE_COMPARE(value, 0.426993f); + + /* Round-trip */ + CORRADE_COMPARE(Color3::fromHsv(230.0_degf, 0.749f, 0.427f).toHsv(), + std::make_tuple(230.0_degf, 0.749f, 0.427f)); + CORRADE_COMPARE(Color4::fromHsv(230.0_degf, 0.749f, 0.427f, 0.175f).toHsv(), + std::make_tuple(230.0_degf, 0.749f, 0.427f)); } -void ColorTest::hsvOverflow() { - CORRADE_COMPARE(Color3ub::fromHsv(27.0_degf - 360.0_degf, 1.0f, 1.0f), Color3ub(255, 114, 0)); - CORRADE_COMPARE(Color3ub::fromHsv(86.0_degf - 360.0_degf, 1.0f, 1.0f), Color3ub(144, 255, 0)); - CORRADE_COMPARE(Color3ub::fromHsv(134.0_degf - 360.0_degf, 1.0f, 1.0f), Color3ub(0, 255, 59)); - CORRADE_COMPARE(Color3ub::fromHsv(191.0_degf - 360.0_degf, 1.0f, 1.0f), Color3ub(0, 208, 255)); - CORRADE_COMPARE(Color3ub::fromHsv(269.0_degf - 360.0_degf, 1.0f, 1.0f), Color3ub(123, 0, 255)); - CORRADE_COMPARE(Color3ub::fromHsv(317.0_degf - 360.0_degf, 1.0f, 1.0f), Color3ub(255, 0, 182)); - - CORRADE_COMPARE(Color3ub::fromHsv(360.0_degf + 27.0_degf, 1.0f, 1.0f), Color3ub(255, 114, 0)); - CORRADE_COMPARE(Color3ub::fromHsv(360.0_degf + 86.0_degf, 1.0f, 1.0f), Color3ub(144, 255, 0)); - CORRADE_COMPARE(Color3ub::fromHsv(360.0_degf + 134.0_degf, 1.0f, 1.0f), Color3ub(0, 255, 59)); - CORRADE_COMPARE(Color3ub::fromHsv(360.0_degf + 191.0_degf, 1.0f, 1.0f), Color3ub(0, 208, 255)); - CORRADE_COMPARE(Color3ub::fromHsv(360.0_degf + 269.0_degf, 1.0f, 1.0f), Color3ub(123, 0, 255)); - CORRADE_COMPARE(Color3ub::fromHsv(360.0_degf + 317.0_degf, 1.0f, 1.0f), Color3ub(255, 0, 182)); +void ColorTest::fromHsvHueOverflow() { + CORRADE_COMPARE(Color3::fromHsv( 27.0_degf - 360.0_degf, 1.0f, 1.0f), (Color3{1.0f, 0.45f, 0.0f})); + CORRADE_COMPARE(Color3::fromHsv( 86.0_degf - 360.0_degf, 1.0f, 1.0f), (Color3{0.566667f, 1.0f, 0.0f})); + CORRADE_COMPARE(Color3::fromHsv(134.0_degf - 360.0_degf, 1.0f, 1.0f), (Color3{0.0f, 1.0f, 0.233333f})); + CORRADE_COMPARE(Color3::fromHsv(191.0_degf - 360.0_degf, 1.0f, 1.0f), (Color3{0.0f, 0.816667f, 1.0f})); + CORRADE_COMPARE(Color3::fromHsv(269.0_degf - 360.0_degf, 1.0f, 1.0f), (Color3{0.483333f, 0.0f, 1.0f})); + CORRADE_COMPARE(Color3::fromHsv(317.0_degf - 360.0_degf, 1.0f, 1.0f), (Color3{1.0f, 0.0f, 0.716667f})); + + CORRADE_COMPARE(Color3::fromHsv( 27.0_degf + 360.0_degf, 1.0f, 1.0f), (Color3{1.0f, 0.45f, 0.0f})); + CORRADE_COMPARE(Color3::fromHsv( 86.0_degf + 360.0_degf, 1.0f, 1.0f), (Color3{0.566667f, 1.0f, 0.0f})); + CORRADE_COMPARE(Color3::fromHsv(134.0_degf + 360.0_degf, 1.0f, 1.0f), (Color3{0.0f, 1.0f, 0.233333f})); + CORRADE_COMPARE(Color3::fromHsv(191.0_degf + 360.0_degf, 1.0f, 1.0f), (Color3{0.0f, 0.816667f, 1.0f})); + CORRADE_COMPARE(Color3::fromHsv(269.0_degf + 360.0_degf, 1.0f, 1.0f), (Color3{0.483333f, 0.0f, 1.0f})); + CORRADE_COMPARE(Color3::fromHsv(317.0_degf + 360.0_degf, 1.0f, 1.0f), (Color3{1.0f, 0.0f, 0.716667f})); } -void ColorTest::hsvAlpha() { - CORRADE_COMPARE(Color4ub::fromHsv(std::make_tuple(230.0_degf, 0.749f, 0.427f), 23), Color4ub(27, 40, 108, 23)); - CORRADE_COMPARE(Color4ub::fromHsv(230.0_degf, 0.749f, 0.427f, 23), Color4ub(27, 40, 108, 23)); - - /* Default alpha */ - CORRADE_COMPARE(Color4ub::fromHsv(std::make_tuple(230.0_degf, 0.749f, 0.427f)), Color4ub(27, 40, 108, 255)); - CORRADE_COMPARE(Color4ub::fromHsv(230.0_degf, 0.749f, 0.427f), Color4ub(27, 40, 108, 255)); +void ColorTest::fromHsvDefaultAlpha() { + CORRADE_COMPARE(Color4::fromHsv(std::make_tuple(230.0_degf, 0.749f, 0.427f)), + (Color4{0.107177f, 0.160481f, 0.427f, 1.0f})); + CORRADE_COMPARE(Color4::fromHsv(230.0_degf, 0.749f, 0.427f), + (Color4{0.107177f, 0.160481f, 0.427f, 1.0f})); + + /* Integral */ + CORRADE_COMPARE(Math::Color4::fromHsv(std::make_tuple(230.0_degf, 0.749f, 0.427f)), + (Math::Color4{7023, 10517, 27983, 65535})); + CORRADE_COMPARE(Math::Color4::fromHsv(230.0_degf, 0.749f, 0.427f), + (Math::Color4{7023, 10517, 27983, 65535})); } void ColorTest::swizzleType() {