Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gtests/blenlib/BLI_math_color_test.cc')
-rw-r--r--tests/gtests/blenlib/BLI_math_color_test.cc88
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/gtests/blenlib/BLI_math_color_test.cc b/tests/gtests/blenlib/BLI_math_color_test.cc
new file mode 100644
index 00000000000..dd3b3f1add1
--- /dev/null
+++ b/tests/gtests/blenlib/BLI_math_color_test.cc
@@ -0,0 +1,88 @@
+#include "testing/testing.h"
+
+#include "BLI_math.h"
+
+TEST(mathutils, RGBToHSVRoundtrip)
+{
+ float orig_rgb[3] = {0.1f, 0.2f, 0.3f};
+ float hsv[3], rgb[3];
+ rgb_to_hsv_v(orig_rgb, hsv);
+ hsv_to_rgb_v(hsv, rgb);
+ EXPECT_V3_NEAR(orig_rgb, rgb, 1e-5);
+}
+
+TEST(mathutils, RGBToHSLRoundtrip)
+{
+ float orig_rgb[3] = {0.1f, 0.2f, 0.3f};
+ float hsl[3], rgb[3];
+ rgb_to_hsl_v(orig_rgb, hsl);
+ hsl_to_rgb_v(hsl, rgb);
+ EXPECT_V3_NEAR(orig_rgb, rgb, 1e-5);
+}
+
+TEST(mathutils, RGBToYUVRoundtrip)
+{
+ float orig_rgb[3] = {0.1f, 0.2f, 0.3f};
+ float yuv[3], rgb[3];
+ rgb_to_yuv(orig_rgb[0], orig_rgb[1], orig_rgb[2],
+ &yuv[0], &yuv[1], &yuv[2]);
+ yuv_to_rgb(yuv[0], yuv[1], yuv[2],
+ &rgb[0], &rgb[1], &rgb[2]);
+ EXPECT_V3_NEAR(orig_rgb, rgb, 1e-4);
+}
+
+TEST(mathutils, RGBToYCCRoundtrip)
+{
+ float orig_rgb[3] = {0.1f, 0.2f, 0.3f};
+ float ycc[3], rgb[3];
+
+ rgb_to_ycc(orig_rgb[0], orig_rgb[1], orig_rgb[2],
+ &ycc[0], &ycc[1], &ycc[2],
+ BLI_YCC_ITU_BT601);
+ ycc_to_rgb(ycc[0], ycc[1], ycc[2],
+ &rgb[0], &rgb[1], &rgb[2],
+ BLI_YCC_ITU_BT601);
+ EXPECT_V3_NEAR(orig_rgb, rgb, 1e-3);
+
+ rgb_to_ycc(orig_rgb[0], orig_rgb[1], orig_rgb[2],
+ &ycc[0], &ycc[1], &ycc[2],
+ BLI_YCC_ITU_BT709);
+ ycc_to_rgb(ycc[0], ycc[1], ycc[2],
+ &rgb[0], &rgb[1], &rgb[2],
+ BLI_YCC_ITU_BT709);
+ EXPECT_V3_NEAR(orig_rgb, rgb, 1e-3);
+
+ rgb_to_ycc(orig_rgb[0], orig_rgb[1], orig_rgb[2],
+ &ycc[0], &ycc[1], &ycc[2],
+ BLI_YCC_JFIF_0_255);
+ ycc_to_rgb(ycc[0], ycc[1], ycc[2],
+ &rgb[0], &rgb[1], &rgb[2],
+ BLI_YCC_JFIF_0_255);
+ EXPECT_V3_NEAR(orig_rgb, rgb, 1e-3);
+}
+
+TEST(mathutils, LinearRGBTosRGBNearZero)
+{
+ float linear_color = 0.002f;
+ float srgb_color = linearrgb_to_srgb(linear_color);
+ EXPECT_NEAR(0.02584f, srgb_color, 1e-5);
+}
+
+TEST(mathutils, LinearRGBTosRGB)
+{
+ float linear_color = 0.75f;
+ float srgb_color = linearrgb_to_srgb(linear_color);
+ EXPECT_NEAR(0.880824f, srgb_color, 1e-5);
+}
+
+TEST(mathutils, LinearRGBTosRGBRoundtrip)
+{
+ const int N = 50;
+ int i;
+ for (i = 0; i < N; ++i) {
+ float orig_linear_color = (float) i / N;
+ float srgb_color = linearrgb_to_srgb(orig_linear_color);
+ float linear_color = srgb_to_linearrgb(srgb_color);
+ EXPECT_NEAR(orig_linear_color, linear_color, 1e-5);
+ }
+}