diff options
author | Brecht Van Lommel <brecht@blender.org> | 2020-08-07 17:43:42 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2020-08-10 19:14:00 +0300 |
commit | 53d203dea8230da4e80f3cc61468a4e24ff6759c (patch) | |
tree | 3f1b7498fb1a3108e60a4355bec0e4eef76110e4 /source/blender/blenlib/tests/BLI_math_color_test.cc | |
parent | af77bf1f0f94cb07d5bf681d1f771d4106873780 (diff) |
Tests: move remaining gtests into their own module folders
And make them part of the blender_test runner. The one exception is blenlib
performance tests, which we don't want to run by default. They remain in their
own executable.
Differential Revision: https://developer.blender.org/D8498
Diffstat (limited to 'source/blender/blenlib/tests/BLI_math_color_test.cc')
-rw-r--r-- | source/blender/blenlib/tests/BLI_math_color_test.cc | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/source/blender/blenlib/tests/BLI_math_color_test.cc b/source/blender/blenlib/tests/BLI_math_color_test.cc new file mode 100644 index 00000000000..7df47e74eb0 --- /dev/null +++ b/source/blender/blenlib/tests/BLI_math_color_test.cc @@ -0,0 +1,76 @@ +/* Apache License, Version 2.0 */ + +#include "testing/testing.h" + +#include "BLI_math.h" + +TEST(math_color, 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(math_color, 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(math_color, 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], BLI_YUV_ITU_BT709); + yuv_to_rgb(yuv[0], yuv[1], yuv[2], &rgb[0], &rgb[1], &rgb[2], BLI_YUV_ITU_BT709); + EXPECT_V3_NEAR(orig_rgb, rgb, 1e-4); +} + +TEST(math_color, 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(math_color, LinearRGBTosRGBNearZero) +{ + float linear_color = 0.002f; + float srgb_color = linearrgb_to_srgb(linear_color); + EXPECT_NEAR(0.02584f, srgb_color, 1e-5); +} + +TEST(math_color, LinearRGBTosRGB) +{ + float linear_color = 0.75f; + float srgb_color = linearrgb_to_srgb(linear_color); + EXPECT_NEAR(0.880824f, srgb_color, 1e-5); +} + +TEST(math_color, 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); + } +} |