1 // Unit tests for MixEffect.
4 #include "gtest/gtest.h"
5 #include "mix_effect.h"
7 TEST(MixEffectTest, FiftyFiftyMix) {
16 float expected_data[] = {
21 EffectChainTester tester(data_a, 2, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
22 Effect *input1 = tester.get_chain()->last_added_effect();
23 Effect *input2 = tester.add_input(data_b, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
25 Effect *mix_effect = tester.get_chain()->add_effect(new MixEffect(), input1, input2);
26 ASSERT_TRUE(mix_effect->set_float("strength_first", 0.5f));
27 ASSERT_TRUE(mix_effect->set_float("strength_second", 0.5f));
28 tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR);
30 expect_equal(expected_data, out_data, 2, 2);
33 TEST(MixEffectTest, OnlyA) {
43 EffectChainTester tester(data_a, 2, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
44 Effect *input1 = tester.get_chain()->last_added_effect();
45 Effect *input2 = tester.add_input(data_b, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
47 Effect *mix_effect = tester.get_chain()->add_effect(new MixEffect(), input1, input2);
48 ASSERT_TRUE(mix_effect->set_float("strength_first", 1.0f));
49 ASSERT_TRUE(mix_effect->set_float("strength_second", 0.0f));
50 tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR);
52 expect_equal(data_a, out_data, 2, 2);
55 TEST(MixEffectTest, DoesNotSumToOne) {
57 1.0f, 0.5f, 0.75f, 0.333f,
60 1.0f, 0.25f, 0.15f, 0.333f,
63 // The fact that the RGB values don't sum but get averaged here might
64 // actually be a surprising result, but when you think of it,
65 // it does make physical sense.
66 float expected_data[] = {
67 1.0f, 0.375f, 0.45f, 0.666f,
71 EffectChainTester tester(data_a, 1, 1, FORMAT_RGBA_POSTMULTIPLIED_ALPHA, COLORSPACE_sRGB, GAMMA_LINEAR);
72 Effect *input1 = tester.get_chain()->last_added_effect();
73 Effect *input2 = tester.add_input(data_b, FORMAT_RGBA_POSTMULTIPLIED_ALPHA, COLORSPACE_sRGB, GAMMA_LINEAR);
75 Effect *mix_effect = tester.get_chain()->add_effect(new MixEffect(), input1, input2);
76 ASSERT_TRUE(mix_effect->set_float("strength_first", 1.0f));
77 ASSERT_TRUE(mix_effect->set_float("strength_second", 1.0f));
78 tester.run(out_data, GL_RGBA, COLORSPACE_sRGB, GAMMA_LINEAR);
80 expect_equal(expected_data, out_data, 4, 1);
83 TEST(MixEffectTest, MixesLinearlyDespitesRGBInputsAndOutputs) {
92 float expected_data[] = { // sRGB(0.5 * inv_sRGB(a)).
97 EffectChainTester tester(data_a, 2, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_sRGB);
98 Effect *input1 = tester.get_chain()->last_added_effect();
99 Effect *input2 = tester.add_input(data_b, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_sRGB);
101 Effect *mix_effect = tester.get_chain()->add_effect(new MixEffect(), input1, input2);
102 ASSERT_TRUE(mix_effect->set_float("strength_first", 0.5f));
103 ASSERT_TRUE(mix_effect->set_float("strength_second", 0.5f));
104 tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_sRGB);
106 expect_equal(expected_data, out_data, 2, 2);