]> git.sesse.net Git - movit/blobdiff - resample_effect_test.cpp
Hard-assert on something that has bitten me too many times now.
[movit] / resample_effect_test.cpp
index 9082b26b42bc3ebe490046747fd8deef5a004328..02d9d74d1102ace6a956331bac2280f8a368060f 100644 (file)
@@ -96,11 +96,11 @@ TEST(ResampleEffectTest, DownscaleByTwoGetsCorrectPixelCenters) {
        // the texel center right (everything is nicely symmetric).
        // The approximate magnitudes have been checked against ImageMagick.
        float expected_data[size * size] = {
        // the texel center right (everything is nicely symmetric).
        // The approximate magnitudes have been checked against ImageMagick.
        float expected_data[size * size] = {
-                0.0046, -0.0068, -0.0611, -0.0068,  0.0047,
-               -0.0068,  0.0100,  0.0895,  0.0100, -0.0068,
-               -0.0603,  0.0892,  0.7993,  0.0895, -0.0611,
-               -0.0067,  0.0100,  0.0892,  0.0100, -0.0068,
-                0.0045, -0.0067, -0.0603, -0.0068,  0.0046,
+                0.0045, -0.0067, -0.0599, -0.0067,  0.0045,
+               -0.0067,  0.0100,  0.0892,  0.0100, -0.0067,
+               -0.0599,  0.0890,  0.7925,  0.0892, -0.0599,
+               -0.0067,  0.0100,  0.0890,  0.0100, -0.0067,
+                0.0045, -0.0067, -0.0599, -0.0067,  0.0045,
        };
        float data[size * size * 4], out_data[size * size];
 
        };
        float data[size * size * 4], out_data[size * size];
 
@@ -162,8 +162,8 @@ TEST(ResampleEffectTest, UpscaleByThreeGetsCorrectPixelCenters) {
        EXPECT_FLOAT_EQ(1.0, out_data[7 * (size * 3) + 7]);
        for (unsigned y = 0; y < size * 3; ++y) {
                for (unsigned x = 0; x < size * 3; ++x) {
        EXPECT_FLOAT_EQ(1.0, out_data[7 * (size * 3) + 7]);
        for (unsigned y = 0; y < size * 3; ++y) {
                for (unsigned x = 0; x < size * 3; ++x) {
-                       EXPECT_FLOAT_EQ(out_data[y * (size * 3) + x], out_data[(size * 3 - y - 1) * (size * 3) + x]);
-                       EXPECT_FLOAT_EQ(out_data[y * (size * 3) + x], out_data[y * (size * 3) + (size * 3 - x - 1)]);
+                       EXPECT_NEAR(out_data[y * (size * 3) + x], out_data[(size * 3 - y - 1) * (size * 3) + x], 1e-6);
+                       EXPECT_NEAR(out_data[y * (size * 3) + x], out_data[y * (size * 3) + (size * 3 - x - 1)], 1e-6);
                }
        }
 }
                }
        }
 }
@@ -205,7 +205,7 @@ TEST(ResampleEffectTest, HeavyResampleGetsSumRight) {
        // Require that we are within 10-bit accuracy. Note that this limit is for
        // one pass only, but the limit is tight enough that it should be good enough
        // for 10-bit accuracy even after two passes.
        // Require that we are within 10-bit accuracy. Note that this limit is for
        // one pass only, but the limit is tight enough that it should be good enough
        // for 10-bit accuracy even after two passes.
-       expect_equal(expected_data, out_data, dwidth, dheight, 0.1 / 1023.0);
+       expect_equal(expected_data, out_data, dwidth, dheight, 0.12 / 1023.0);
 }
 
 TEST(ResampleEffectTest, ReadWholePixelFromLeft) {
 }
 
 TEST(ResampleEffectTest, ReadWholePixelFromLeft) {
@@ -402,12 +402,12 @@ TEST(ResampleEffectTest, VerticalZoomFromTop) {
 }
 
 TEST(ResampleEffectTest, Precision) {
 }
 
 TEST(ResampleEffectTest, Precision) {
-       const int size = 2048;
+       const int size = 1920;  // Difficult non-power-of-two size.
        const int offset = 5;
 
        // Deliberately put the data of interest very close to the right,
        // where texture coordinates are farther from 0 and thus less precise.
        const int offset = 5;
 
        // Deliberately put the data of interest very close to the right,
        // where texture coordinates are farther from 0 and thus less precise.
-       float data[size] = {0};
+       float data[size * 2] = {0};
        data[size - offset] = 1.0f;
        float expected_data[size * 2] = {0};
        for (int x = 0; x < size * 2; ++x) {
        data[size - offset] = 1.0f;
        float expected_data[size * 2] = {0};
        for (int x = 0; x < size * 2; ++x) {