21 void roundtripConversion_data();
22 void roundtripConversion();
25static bool compareVectors(
const QVector3D &one,
const QVector3D &two,
float maxDifference)
27 const bool ret = std::abs(one.x() - two.x()) <= maxDifference
28 && std::abs(one.y() - two.y()) <= maxDifference
29 && std::abs(one.z() - two.z()) <= maxDifference;
31 qWarning() << one <<
"!=" << two <<
"within" << maxDifference;
36void TestColorspaces::roundtripConversion_data()
38 QTest::addColumn<NamedColorimetry>(
"srcColorimetry");
39 QTest::addColumn<NamedTransferFunction>(
"srcTransferFunction");
40 QTest::addColumn<NamedColorimetry>(
"dstColorimetry");
41 QTest::addColumn<NamedTransferFunction>(
"dstTransferFunction");
42 QTest::addColumn<double>(
"requiredAccuracy");
44 const double resolution10bit = std::pow(1.0 / 2.0, 10);
45 QTest::addRow(
"BT709 (sRGB) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::sRGB << NamedColorimetry::BT2020 << NamedTransferFunction::linear << resolution10bit;
46 QTest::addRow(
"BT709 (gamma 2.2) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::gamma22 << NamedColorimetry::BT2020 << NamedTransferFunction::linear << resolution10bit;
47 QTest::addRow(
"BT709 (scRGB) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::scRGB << NamedColorimetry::BT2020 << NamedTransferFunction::linear << resolution10bit;
48 QTest::addRow(
"BT709 (linear) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::linear << NamedColorimetry::BT2020 << NamedTransferFunction::linear << resolution10bit;
49 QTest::addRow(
"BT709 (PQ) <-> BT2020 (linear)") << NamedColorimetry::BT709 << NamedTransferFunction::PerceptualQuantizer << NamedColorimetry::BT2020 << NamedTransferFunction::linear << 3 * resolution10bit;
52void TestColorspaces::roundtripConversion()
58 QFETCH(
double, requiredAccuracy);
60 const auto src =
ColorDescription(srcColorimetry, srcTransferFunction, 100, 0, 100, 100);
61 const auto dst =
ColorDescription(dstColorimetry, dstTransferFunction, 100, 0, 100, 100);
63 const QVector3D red(1, 0, 0);
64 const QVector3D green(0, 1, 0);
65 const QVector3D blue(0, 0, 1);
66 const QVector3D white(1, 1, 1);
68 QVERIFY(compareVectors(dst.mapTo(src.mapTo(red, dst), src), red, requiredAccuracy));
69 QVERIFY(compareVectors(dst.mapTo(src.mapTo(green, dst), src), green, requiredAccuracy));
70 QVERIFY(compareVectors(dst.mapTo(src.mapTo(blue, dst), src), blue, requiredAccuracy));
71 QVERIFY(compareVectors(dst.mapTo(src.mapTo(white, dst), src), white, requiredAccuracy));
76#include "test_colorspaces.moc"
TestColorspaces()=default
QTEST_MAIN(OnScreenNotificationTest)