X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=diffusion_effect_test.cpp;fp=diffusion_effect_test.cpp;h=446a51f11c5265d41f411f472c5319f510079074;hp=0000000000000000000000000000000000000000;hb=4b8eee7020f14c2321169c07a3cb34e0c48d2f56;hpb=57acdb174fffed295ee2255146b03d9efbec1b5f diff --git a/diffusion_effect_test.cpp b/diffusion_effect_test.cpp new file mode 100644 index 0000000..446a51f --- /dev/null +++ b/diffusion_effect_test.cpp @@ -0,0 +1,60 @@ +// Unit tests for DiffusionEffect. + +#include "test_util.h" +#include "gtest/gtest.h" +#include "diffusion_effect.h" + +TEST(DiffusionEffectTest, IdentityTransformDoesNothing) { + const int size = 4; + + float data[size * size] = { + 0.0, 1.0, 0.0, 1.0, + 0.0, 1.0, 1.0, 0.0, + 0.0, 0.5, 1.0, 0.5, + 0.0, 0.0, 0.0, 0.0, + }; + float out_data[size * size]; + + EffectChainTester tester(data, size, size, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + Effect *diffusion_effect = tester.get_chain()->add_effect(new DiffusionEffect()); + ASSERT_TRUE(diffusion_effect->set_float("radius", 0.0f)); + tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(data, out_data, size, size); +} + +TEST(DiffusionEffectTest, FlattensOutWhitePyramid) { + const int size = 9; + + float data[size * size] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.7, 0.7, 0.7, 0.5, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.7, 1.0, 0.7, 0.5, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.7, 0.7, 0.7, 0.5, 0.0, 0.0, + 0.0, 0.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + }; + float expected_data[size * size] = { + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.4, 0.4, 0.4, 0.4, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.5, 0.5, 0.5, 0.4, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.5, 0.6, 0.5, 0.4, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.5, 0.5, 0.5, 0.4, 0.0, 0.0, + 0.0, 0.0, 0.4, 0.4, 0.4, 0.4, 0.4, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + }; + float out_data[size * size]; + + EffectChainTester tester(data, size, size, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + Effect *diffusion_effect = tester.get_chain()->add_effect(new DiffusionEffect()); + ASSERT_TRUE(diffusion_effect->set_float("radius", 2.0f)); + ASSERT_TRUE(diffusion_effect->set_float("blurred_mix_amount", 0.7f)); + tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(expected_data, out_data, size, size, 0.05f, 0.002); +}