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) {
64 float expected_data[] = {
69 EffectChainTester tester(data_a, 2, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
70 Effect *input1 = tester.get_chain()->last_added_effect();
71 Effect *input2 = tester.add_input(data_b, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR);
73 Effect *mix_effect = tester.get_chain()->add_effect(new MixEffect(), input1, input2);
74 ASSERT_TRUE(mix_effect->set_float("strength_first", 1.0f));
75 ASSERT_TRUE(mix_effect->set_float("strength_second", -1.0f));
76 tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR);
78 expect_equal(expected_data, out_data, 2, 2);
81 TEST(MixEffectTest, MixesLinearlyDespitesRGBInputsAndOutputs) {
90 float expected_data[] = { // sRGB(0.5 * inv_sRGB(a)).
95 EffectChainTester tester(data_a, 2, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_sRGB);
96 Effect *input1 = tester.get_chain()->last_added_effect();
97 Effect *input2 = tester.add_input(data_b, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_sRGB);
99 Effect *mix_effect = tester.get_chain()->add_effect(new MixEffect(), input1, input2);
100 ASSERT_TRUE(mix_effect->set_float("strength_first", 0.5f));
101 ASSERT_TRUE(mix_effect->set_float("strength_second", 0.5f));
102 tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_sRGB);
104 expect_equal(expected_data, out_data, 2, 2);