// Append to BLI_math_color_test.cc // Easy to compile and run: ninja blenlib_test && ./bin/tests/blenlib_test --gtest_filter="math_color*" // Expected values are created using naive codepath. // This is probably proper baseline? TEST(math_color, linearrgb_to_srgb_v3_v3) { { const float linear_color[3] = {0.0023f, 0.0024f, 0.0025f}; float srgb_color[3]; linearrgb_to_srgb_v3_v3(srgb_color, linear_color); EXPECT_NEAR(0.029716000f, srgb_color[0], 1e-8f); EXPECT_NEAR(0.031008001f, srgb_color[1], 1e-8f); EXPECT_NEAR(0.032299999f, srgb_color[2], 1e-8f); } { const float linear_color[3] = {0.71f, 0.75f, 0.78f}; float srgb_color[3]; linearrgb_to_srgb_v3_v3(srgb_color, linear_color); EXPECT_NEAR(0.859695911f, srgb_color[0], 1e-8f); EXPECT_NEAR(0.880824983f, srgb_color[1], 1e-8f); EXPECT_NEAR(0.896243811f, srgb_color[2], 1e-8f); } } TEST(math_color, srgb_to_linearrgb_v3_v3) { { const float srgb_color[3] = {0.0023f, 0.0024f, 0.0025f}; float linear_color[3]; srgb_to_linearrgb_v3_v3(linear_color, srgb_color); EXPECT_NEAR(0.002300000f, srgb_color[0], 1e-8f); EXPECT_NEAR(0.002400000f, srgb_color[1], 1e-8f); EXPECT_NEAR(0.002500000f, srgb_color[2], 1e-8f); } { const float srgb_color[3] = {0.71f, 0.72f, 0.73f}; float linear_color[3]; srgb_to_linearrgb_v3_v3(linear_color, srgb_color); EXPECT_NEAR(0.709999979f, srgb_color[0], 1e-8f); EXPECT_NEAR(0.720000029f, srgb_color[1], 1e-8f); EXPECT_NEAR(0.730000019f, srgb_color[2], 1e-8f); } } // Expected values are created using SSE2 codepath TEST(math_color, linearrgb_to_srgb_v3_v3) { { const float linear_color[3] = {0.0023f, 0.0024f, 0.0025f}; float srgb_color[3]; linearrgb_to_srgb_v3_v3(srgb_color, linear_color); EXPECT_NEAR(0.029716000f, srgb_color[0], 1e-8f); EXPECT_NEAR(0.031008001f, srgb_color[1], 1e-8f); EXPECT_NEAR(0.032299999f, srgb_color[2], 1e-8f); } { const float linear_color[3] = {0.71f, 0.75f, 0.78f}; float srgb_color[3]; linearrgb_to_srgb_v3_v3(srgb_color, linear_color); EXPECT_NEAR(0.859484434f, srgb_color[0], 1e-8f); EXPECT_NEAR(0.881012440f, srgb_color[1], 1e-8f); EXPECT_NEAR(0.896070659f, srgb_color[2], 1e-8f); } } TEST(math_color, srgb_to_linearrgb_v3_v3) { { const float srgb_color[3] = {0.0023f, 0.0024f, 0.0025f}; float linear_color[3]; srgb_to_linearrgb_v3_v3(linear_color, srgb_color); EXPECT_NEAR(0.002300000f, srgb_color[0], 1e-8f); EXPECT_NEAR(0.002400000f, srgb_color[1], 1e-8f); EXPECT_NEAR(0.002500000f, srgb_color[2], 1e-8f); } { const float srgb_color[3] = {0.71f, 0.72f, 0.73f}; float linear_color[3]; srgb_to_linearrgb_v3_v3(linear_color, srgb_color); EXPECT_NEAR(0.709999979f, srgb_color[0], 1e-8f); EXPECT_NEAR(0.720000029f, srgb_color[1], 1e-8f); EXPECT_NEAR(0.730000019f, srgb_color[2], 1e-8f); } }