Blender V5.0
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/* -------------------------------------------------------------------- */
14
15TEST(color, ThemeByteToFloat)
16{
17 ColorTheme4b theme_byte(192, 128, 64, 128);
18 ColorTheme4f theme_float = color::to_float(theme_byte);
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 = color::to_byte(theme_float);
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);
72 ColorTheme4f theme = color::to_theme4f(linear);
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);
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);
95 ColorTheme4b theme = color::to_theme4b(linear);
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);
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
134
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
ChannelStorageType g
ChannelStorageType b
ChannelStorageType a
BLI_INLINE ColorTheme4f to_float(const ColorTheme4b &theme4b)
Definition BLI_color.hh:64
BLI_INLINE ColorSceneLinear4f< eAlpha::Straight > to_scene_linear(const ColorTheme4f &theme4f)
Definition BLI_color.hh:126
BLI_INLINE ColorTheme4f to_theme4f(const ColorSceneLinear4f< eAlpha::Straight > &scene_linear)
Definition BLI_color.hh:140
BLI_INLINE ColorSceneLinear4f< Alpha > decode(const ColorSceneLinearByteEncoded4b< Alpha > &color)
Definition BLI_color.hh:77
BLI_INLINE ColorTheme4b to_byte(const ColorTheme4f &theme4f)
Definition BLI_color.hh:37
ColorSceneLinear4f< eAlpha::Straight > unpremultiply_alpha(const ColorSceneLinear4f< Alpha > &color)
Definition BLI_color.hh:111
ColorSceneLinear4f< eAlpha::Premultiplied > premultiply_alpha(const ColorSceneLinear4f< Alpha > &color)
Definition BLI_color.hh:93
BLI_INLINE ColorSceneLinearByteEncoded4b< Alpha > encode(const ColorSceneLinear4f< Alpha > &color)
Definition BLI_color.hh:50
BLI_INLINE ColorTheme4b to_theme4b(const ColorSceneLinear4f< eAlpha::Straight > &scene_linear)
Definition BLI_color.hh:147
TEST(blf_load, load)
Definition BLF_tests.cc:34
ColorTheme4< uint8_t > ColorTheme4b
ColorTheme4< float > ColorTheme4f