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:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-06-18 16:49:17 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-06-18 20:09:16 +0400
commit306cbb82ecf0d7c1ba4fb0a1240175b1976bd25b (patch)
treee9eac65bf57126ac233f22fe88cc00df137ec4e5 /tests/gtests/blenlib/BLI_math_color_test.cc
parent47ec0394ca3d03e07c07a67e8f8d1625aedd39dd (diff)
GTest unit testing framework
Currently covers only small set of functionality.
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);
+ }
+}