X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=slice_effect_test.cpp;fp=slice_effect_test.cpp;h=efa6803fdbd7225d02c2c2d12b69e64b5730aa92;hp=0000000000000000000000000000000000000000;hb=f3591ae239781d0587a141e14633e172ba9e376b;hpb=f3c466c53a5fd158029c3752d720af39a15b075e diff --git a/slice_effect_test.cpp b/slice_effect_test.cpp new file mode 100644 index 0000000..efa6803 --- /dev/null +++ b/slice_effect_test.cpp @@ -0,0 +1,117 @@ +// Unit tests for SliceEffect. + +#include + +#include "effect_chain.h" +#include "flat_input.h" +#include "gtest/gtest.h" +#include "image_format.h" +#include "input.h" +#include "slice_effect.h" +#include "test_util.h" + +namespace movit { + +TEST(SliceEffectTest, Identity) { + const int size = 3, output_size = 4; + float data[size * size] = { + 0.0f, 0.1f, 0.2f, + 0.4f, 0.3f, 0.8f, + 0.5f, 0.2f, 0.1f, + }; + float expected_data[output_size * size] = { + 0.0f, 0.1f, 0.2f, 0.2f, + 0.4f, 0.3f, 0.8f, 0.8f, + 0.5f, 0.2f, 0.1f, 0.1f, + }; + float out_data[output_size * size]; + + EffectChainTester tester(NULL, output_size, size, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, size, size); + + Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect()); + ASSERT_TRUE(slice_effect->set_int("input_slice_size", 2)); + ASSERT_TRUE(slice_effect->set_int("output_slice_size", 2)); + ASSERT_TRUE(slice_effect->set_int("direction", SliceEffect::HORIZONTAL)); + tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(expected_data, out_data, output_size, size); +} + +TEST(SliceEffectTest, HorizontalOverlap) { + float data[5 * 2] = { + 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, + 0.4f, 0.3f, 0.2f, 0.1f, 0.0f, + }; + float expected_data[9 * 2] = { + 0.0f, 0.1f, 0.2f, 0.2f, 0.3f, 0.4f, 0.4f, 0.4f, 0.4f, + 0.4f, 0.3f, 0.2f, 0.2f, 0.1f, 0.0f, 0.0f, 0.0f, 0.0f, + }; + float out_data[9 * 2]; + + EffectChainTester tester(NULL, 9, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 5, 2); + + Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect()); + ASSERT_TRUE(slice_effect->set_int("input_slice_size", 2)); + ASSERT_TRUE(slice_effect->set_int("output_slice_size", 3)); + ASSERT_TRUE(slice_effect->set_int("direction", SliceEffect::HORIZONTAL)); + tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(expected_data, out_data, 9, 2); +} + +TEST(SliceEffectTest, HorizontalDiscard) { + float data[6 * 2] = { + 0.0f, 0.1f, 0.2f, 0.2f, 0.3f, 0.4f, + 0.4f, 0.3f, 0.2f, 0.2f, 0.1f, 0.0f, + }; + float expected_data[4 * 2] = { + 0.0f, 0.1f, 0.2f, 0.3f, + 0.4f, 0.3f, 0.2f, 0.1f, + }; + float out_data[4 * 2]; + + EffectChainTester tester(NULL, 4, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 6, 2); + + Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect()); + ASSERT_TRUE(slice_effect->set_int("input_slice_size", 3)); + ASSERT_TRUE(slice_effect->set_int("output_slice_size", 2)); + ASSERT_TRUE(slice_effect->set_int("direction", SliceEffect::HORIZONTAL)); + tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(expected_data, out_data, 4, 2); +} + +TEST(SliceEffectTest, VerticalOverlapSlicesFromBottom) { + float data[2 * 3] = { + 0.0f, 0.1f, + + 0.4f, 0.3f, + 0.6f, 0.2f, + }; + float expected_data[2 * 6] = { + 0.0f, 0.1f, + 0.0f, 0.1f, + 0.0f, 0.1f, + + 0.0f, 0.1f, + 0.4f, 0.3f, + 0.6f, 0.2f, + }; + float out_data[2 * 6]; + + EffectChainTester tester(NULL, 2, 6, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + tester.add_input(data, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR, 2, 3); + + Effect *slice_effect = tester.get_chain()->add_effect(new SliceEffect()); + ASSERT_TRUE(slice_effect->set_int("input_slice_size", 2)); + ASSERT_TRUE(slice_effect->set_int("output_slice_size", 3)); + ASSERT_TRUE(slice_effect->set_int("direction", SliceEffect::VERTICAL)); + tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(expected_data, out_data, 2, 6); +} + +} // namespace movit