Blender V4.3
BLI_color_test.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "testing/testing.h"
6
7#include "BLI_color.hh"
8
9namespace blender::tests {
10
11/* -------------------------------------------------------------------- */
15TEST(color, ThemeByteToFloat)
16{
17 ColorTheme4b theme_byte(192, 128, 64, 128);
18 ColorTheme4f theme_float = theme_byte.to_4f();
19 EXPECT_NEAR(0.75f, theme_float.r, 0.01f);
20 EXPECT_NEAR(0.5f, theme_float.g, 0.01f);
21 EXPECT_NEAR(0.25f, theme_float.b, 0.01f);
22 EXPECT_NEAR(0.5f, theme_float.a, 0.01f);
23}
24
25TEST(color, SrgbStraightFloatToByte)
26{
27 ColorTheme4f theme_float(0.75f, 0.5f, 0.25f, 0.5f);
28 ColorTheme4b theme_byte = theme_float.to_4b();
29 EXPECT_EQ(191, theme_byte.r);
30 EXPECT_EQ(128, theme_byte.g);
31 EXPECT_EQ(64, theme_byte.b);
32 EXPECT_EQ(128, theme_byte.a);
33}
34
35TEST(color, SrgbStraightToSceneLinearPremultiplied)
36{
38
39 ColorTheme4b theme(192, 128, 64, 128);
42 EXPECT_NEAR(0.26f, linear.r, 0.01f);
43 EXPECT_NEAR(0.11f, linear.g, 0.01f);
44 EXPECT_NEAR(0.02f, linear.b, 0.01f);
45 EXPECT_NEAR(0.5f, linear.a, 0.01f);
46}
47
48TEST(color, SceneLinearStraightToPremultiplied)
49{
50 ColorSceneLinear4f<eAlpha::Straight> straight(0.75f, 0.5f, 0.25f, 0.5f);
52 EXPECT_NEAR(0.37f, premultiplied.r, 0.01f);
53 EXPECT_NEAR(0.25f, premultiplied.g, 0.01f);
54 EXPECT_NEAR(0.12f, premultiplied.b, 0.01f);
55 EXPECT_NEAR(0.5f, premultiplied.a, 0.01f);
56}
57
58TEST(color, SceneLinearPremultipliedToStraight)
59{
60 ColorSceneLinear4f<eAlpha::Premultiplied> premultiplied(0.75f, 0.5f, 0.25f, 0.5f);
62 EXPECT_NEAR(1.5f, straight.r, 0.01f);
63 EXPECT_NEAR(1.0f, straight.g, 0.01f);
64 EXPECT_NEAR(0.5f, straight.b, 0.01f);
65 EXPECT_NEAR(0.5f, straight.a, 0.01f);
66}
67
68TEST(color, SceneLinearStraightSrgbFloat)
69{
71 ColorSceneLinear4f<eAlpha::Straight> linear(0.75f, 0.5f, 0.25f, 0.5f);
73 EXPECT_NEAR(0.88f, theme.r, 0.01);
74 EXPECT_NEAR(0.73f, theme.g, 0.01);
75 EXPECT_NEAR(0.53f, theme.b, 0.01);
76 EXPECT_NEAR(0.5f, theme.a, 0.01);
77}
78
79TEST(color, SceneLinearPremultipliedToSrgbFloat)
80{
82 ColorSceneLinear4f<eAlpha::Premultiplied> linear(0.75f, 0.5f, 0.25f, 0.5f);
83 ColorTheme4f theme = BLI_color_convert_to_theme4f(linear.unpremultiply_alpha());
84
85 EXPECT_NEAR(1.19f, theme.r, 0.01);
86 EXPECT_NEAR(1.0f, theme.g, 0.01);
87 EXPECT_NEAR(0.74f, theme.b, 0.01);
88 EXPECT_NEAR(0.5f, theme.a, 0.01);
89}
90
91TEST(color, SceneLinearStraightSrgbByte)
92{
94 ColorSceneLinear4f<eAlpha::Straight> linear(0.75f, 0.5f, 0.25f, 0.5f);
96 EXPECT_EQ(225, theme.r);
97 EXPECT_EQ(188, theme.g);
98 EXPECT_EQ(137, theme.b);
99 EXPECT_EQ(128, theme.a);
100}
101
102TEST(color, SceneLinearPremultipliedToSrgbByte)
103{
105 ColorSceneLinear4f<eAlpha::Premultiplied> linear(0.75f, 0.5f, 0.25f, 0.5f);
106 ColorTheme4b theme = BLI_color_convert_to_theme4b(linear.unpremultiply_alpha());
107 EXPECT_EQ(255, theme.r);
108 EXPECT_EQ(255, theme.g);
109 EXPECT_EQ(188, theme.b);
110 EXPECT_EQ(128, theme.a);
111}
112
113TEST(color, SceneLinearByteEncoding)
114{
115 ColorSceneLinear4f<eAlpha::Premultiplied> linear(0.75f, 0.5f, 0.25f, 0.5f);
117 EXPECT_EQ(225, encoded.r);
118 EXPECT_EQ(188, encoded.g);
119 EXPECT_EQ(137, encoded.b);
120 EXPECT_EQ(128, encoded.a);
121}
122
123TEST(color, SceneLinearByteDecoding)
124{
127 EXPECT_NEAR(0.75f, decoded.r, 0.01f);
128 EXPECT_NEAR(0.5f, decoded.g, 0.01f);
129 EXPECT_NEAR(0.25f, decoded.b, 0.01f);
130 EXPECT_NEAR(0.5f, decoded.a, 0.01f);
131}
132
135} // namespace blender::tests
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
void BLI_init_srgb_conversion(void)
ChannelStorageType r
Definition BLI_color.hh:88
ChannelStorageType g
Definition BLI_color.hh:88
ChannelStorageType b
Definition BLI_color.hh:88
ChannelStorageType a
Definition BLI_color.hh:88
ColorSceneLinear4f< eAlpha::Straight > unpremultiply_alpha() const
Definition BLI_color.hh:192
ColorSceneLinear4f< eAlpha::Premultiplied > premultiply_alpha() const
Definition BLI_color.hh:175
ColorSceneLinear4f< Alpha > decode() const
Definition BLI_color.hh:224
ColorTheme4< float > to_4f() const
Definition BLI_color.hh:262
ColorTheme4< uint8_t > to_4b() const
Definition BLI_color.hh:275
TEST(any, DefaultConstructor)
BLI_INLINE ColorTheme4< uint8_t > BLI_color_convert_to_theme4b(const ColorTheme4< float > &theme4f)
Definition BLI_color.hh:289
BLI_INLINE ColorTheme4< float > BLI_color_convert_to_theme4f(const ColorTheme4< uint8_t > &theme4b)
BLI_INLINE ColorSceneLinear4f< eAlpha::Straight > BLI_color_convert_to_scene_linear(const ColorTheme4f &theme4f)
Definition BLI_color.hh:303