X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=slice_effect_test.cpp;h=163561e7a769b47c1e10342fc1eb973f2e988d4e;hp=410439abcb606cd9a13be2f4017a797093ea6a7c;hb=34509233ba5b71c05f1b85f6fbeadb46719a98f4;hpb=5b6ab865efa692b25590f302c111b30680fbacdd diff --git a/slice_effect_test.cpp b/slice_effect_test.cpp index 410439a..163561e 100644 --- a/slice_effect_test.cpp +++ b/slice_effect_test.cpp @@ -26,7 +26,7 @@ TEST(SliceEffectTest, Identity) { }; float out_data[output_size * size]; - EffectChainTester tester(NULL, output_size, size, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + EffectChainTester tester(nullptr, 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()); @@ -49,7 +49,7 @@ TEST(SliceEffectTest, HorizontalOverlap) { }; float out_data[9 * 2]; - EffectChainTester tester(NULL, 9, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + EffectChainTester tester(nullptr, 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()); @@ -72,7 +72,7 @@ TEST(SliceEffectTest, HorizontalDiscard) { }; float out_data[4 * 2]; - EffectChainTester tester(NULL, 4, 2, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + EffectChainTester tester(nullptr, 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()); @@ -84,30 +84,85 @@ TEST(SliceEffectTest, HorizontalDiscard) { expect_equal(expected_data, out_data, 4, 2); } -TEST(SliceEffectTest, VerticalOverlapSlicesFromBottom) { +TEST(SliceEffectTest, HorizontalOverlapWithOffset) { + float data[5 * 2] = { + /* 0.0f, */ 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, + /* 0.4f, */ 0.4f, 0.3f, 0.2f, 0.1f, 0.0f, + }; + float expected_data[9 * 2] = { + 0.0f, 0.0f, 0.1f, 0.1f, 0.2f, 0.3f, 0.3f, 0.4f, 0.4f, + 0.4f, 0.4f, 0.3f, 0.3f, 0.2f, 0.1f, 0.1f, 0.0f, 0.0f, + }; + float out_data[9 * 2]; + + EffectChainTester tester(nullptr, 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("offset", -1)); + 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, VerticalOverlapSlicesFromTop) { 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.4f, 0.3f, + 0.6f, 0.2f, + 0.6f, 0.2f, + 0.6f, 0.2f, + 0.6f, 0.2f, + }; + float out_data[2 * 6]; + + EffectChainTester tester(nullptr, 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); +} + +TEST(SliceEffectTest, VerticalOverlapOffsetsFromTop) { + float data[2 * 3] = { 0.0f, 0.1f, 0.4f, 0.3f, + + 0.6f, 0.2f, + }; + float expected_data[2 * 6] = { + 0.4f, 0.3f, + 0.6f, 0.2f, + 0.6f, 0.2f, + + 0.6f, 0.2f, + 0.6f, 0.2f, 0.6f, 0.2f, }; float out_data[2 * 6]; - EffectChainTester tester(NULL, 2, 6, FORMAT_GRAYSCALE, COLORSPACE_sRGB, GAMMA_LINEAR); + EffectChainTester tester(nullptr, 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("offset", 1)); ASSERT_TRUE(slice_effect->set_int("direction", SliceEffect::VERTICAL)); tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_LINEAR);