File indexing completed on 2024-12-01 10:31:02
0001 // SPDX-FileCopyrightText: Lukas Sommer <sommerluk@gmail.com> 0002 // SPDX-License-Identifier: BSD-2-Clause OR MIT 0003 0004 // First included header is the public header of the class we are testing; 0005 // this forces the header to be self-contained. 0006 #include "cielchd50values.h" 0007 0008 #include "helperposixmath.h" 0009 #include "lchdouble.h" 0010 #include "rgbcolorspace.h" 0011 #include <qglobal.h> 0012 #include <qobject.h> 0013 #include <qsharedpointer.h> 0014 #include <qtest.h> 0015 #include <qtestcase.h> 0016 0017 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) 0018 #include <qtmetamacros.h> 0019 #else 0020 #include <qobjectdefs.h> 0021 #include <qstring.h> 0022 #endif 0023 0024 namespace PerceptualColor 0025 { 0026 class TestCielchD50Values : public QObject 0027 { 0028 Q_OBJECT 0029 0030 public: 0031 explicit TestCielchD50Values(QObject *parent = nullptr) 0032 : QObject(parent) 0033 { 0034 } 0035 0036 private Q_SLOTS: 0037 0038 void initTestCase() 0039 { 0040 // Called before the first test function is executed 0041 } 0042 0043 void cleanupTestCase() 0044 { 0045 // Called after the last test function was executed 0046 } 0047 0048 void init() 0049 { 0050 // Called before each test function is executed 0051 } 0052 void cleanup() 0053 { 0054 // Called after every test function 0055 } 0056 0057 void testNeutralValues() 0058 { 0059 // Is the value as documented? 0060 QCOMPARE(static_cast<qreal>(PerceptualColor::CielchD50Values::neutralChroma), 0); 0061 // Is the value as documented? 0062 QCOMPARE(static_cast<qreal>(PerceptualColor::CielchD50Values::neutralHue), 0); 0063 // Is the value as documented? 0064 QCOMPARE(static_cast<qreal>(PerceptualColor::CielchD50Values::neutralLightness), 50); 0065 } 0066 0067 void testCielchD50Values() 0068 { 0069 auto temp = RgbColorSpace::createSrgb(); 0070 LchDouble color; 0071 qreal presicion = 0.1; 0072 qreal hue = 0; 0073 bool inGamutValueFound = false; 0074 0075 // Test if versatile is small enough 0076 qreal precisionVersatileSrgbChroma = // 0077 presicion / 360 * 2 * pi * PerceptualColor::CielchD50Values::srgbVersatileChroma; 0078 color.c = PerceptualColor::CielchD50Values::srgbVersatileChroma; 0079 color.l = 50; 0080 hue = 0; 0081 while (hue <= 360) { 0082 color.h = hue; 0083 QVERIFY2(temp->isCielchD50InGamut(color), "Test if versatile is small enough"); 0084 hue += precisionVersatileSrgbChroma; 0085 } 0086 0087 // Test if versatile is as big as possible 0088 color.c = PerceptualColor::CielchD50Values::srgbVersatileChroma + 1; 0089 color.l = 50; 0090 inGamutValueFound = true; 0091 hue = 0; 0092 while (hue <= 360) { 0093 color.h = hue; 0094 if (!temp->isCielchD50InGamut(color)) { 0095 inGamutValueFound = false; 0096 break; 0097 } 0098 hue += precisionVersatileSrgbChroma; 0099 } 0100 QVERIFY2(!inGamutValueFound, "Test if versatile is as big as possible"); 0101 } 0102 0103 void testNeutralGray() 0104 { 0105 // Test that the unified initialization is done in the correct order. 0106 QCOMPARE(CielchD50Values::neutralGray.l, 0107 50 // Should be half the way between light and dark 0108 ); 0109 QCOMPARE(CielchD50Values::neutralGray.c, 0110 0 // Should have no chroma 0111 ); 0112 QCOMPARE(CielchD50Values::neutralGray.h, 0113 0 // Hue does not matter, but by convention should be 0 0114 ); 0115 } 0116 }; 0117 0118 } // namespace PerceptualColor 0119 0120 QTEST_MAIN(PerceptualColor::TestCielchD50Values) 0121 // The following “include” is necessary because we do not use a header file: 0122 #include "testcielchd50values.moc"