[Pixman] [PATCH 02/14] Add new test of filter reduction from BILINEAR to NEAREST
Oded Gabbay
oded.gabbay at gmail.com
Sun May 1 11:01:10 UTC 2016
On Fri, Apr 29, 2016 at 9:01 PM, Bill Spitzak <spitzak at gmail.com> wrote:
>
> On Fri, Apr 29, 2016 at 4:55 AM, Oded Gabbay <oded.gabbay at gmail.com> wrote:
>>
>> On Tue, Apr 12, 2016 at 5:36 AM, Søren Sandmann Pedersen
>> <soren.sandmann at gmail.com> wrote:
>> > This new test tests a bunch of bilinear downscalings, where many have
>> > a transformation such that the BILINEAR filter can be reduced to
>> > NEAREST (and many don't).
>> >
>> > A CRC32 is computed for all the resulting images and compared to a
>> > known-good value for both 4-bit and 7-bit interpolation.
>> >
>> > V2: Remove leftover comment, some minor formatting fixes, use a
>> > timestamp as the PRNG seed.
>> >
>> > Signed-off-by: Søren Sandmann <soren.sandmann at gmail.com>
>> > ---
>> > test/Makefile.sources | 1 +
>> > test/filter-reduction-test.c | 112
>> > +++++++++++++++++++++++++++++++++++++++++++
>> > 2 files changed, 113 insertions(+)
>> > create mode 100644 test/filter-reduction-test.c
>> >
>> > diff --git a/test/Makefile.sources b/test/Makefile.sources
>> > index 5d55e67..0a56231 100644
>> > --- a/test/Makefile.sources
>> > +++ b/test/Makefile.sources
>> > @@ -21,6 +21,7 @@ TESTPROGRAMS = \
>> > gradient-crash-test \
>> > pixel-test \
>> > matrix-test \
>> > + filter-reduction-test \
>> > composite-traps-test \
>> > region-contains-test \
>> > glyph-test \
>> > diff --git a/test/filter-reduction-test.c b/test/filter-reduction-test.c
>> > new file mode 100644
>> > index 0000000..705fa4b
>> > --- /dev/null
>> > +++ b/test/filter-reduction-test.c
>> > @@ -0,0 +1,112 @@
>> > +#include <stdlib.h>
>> > +#include <stdio.h>
>> > +#include "utils.h"
>> > +
>> > +static const pixman_fixed_t entries[] =
>> > +{
>> > + pixman_double_to_fixed (-1.0),
>> > + pixman_double_to_fixed (-0.5),
>> > + pixman_double_to_fixed (-1/3.0),
>> > + pixman_double_to_fixed (0.0),
>> > + pixman_double_to_fixed (0.5),
>> > + pixman_double_to_fixed (1.0),
>> > + pixman_double_to_fixed (1.5),
>> > + pixman_double_to_fixed (2.0),
>> > + pixman_double_to_fixed (3.0),
>> > +};
>> > +
>> > +#define SIZE 12
>> > +
>> > +static uint32_t
>> > +test_scale (const pixman_transform_t *xform, uint32_t crc)
>> > +{
>> > + uint32_t *srcbuf, *dstbuf;
>> > + pixman_image_t *src, *dest;
>> > +
>> > + srcbuf = malloc (SIZE * SIZE * 4);
>> I admit I didn't look at other tests, but it really caught my eye we
>> don't check for memory allocation failure here.
>>
>> > + prng_randmemset (srcbuf, SIZE * SIZE * 4, 0);
>> > + src = pixman_image_create_bits (
>> > + PIXMAN_a8r8g8b8, SIZE, SIZE, srcbuf, SIZE * 4);
>> > +
>> > + dstbuf = malloc (SIZE * SIZE * 4);
>> same comment
>
>
> I think it is ok to not look for that in unit tests. They will either crash
> or fail.
>
>>
>>
>> > + prng_randmemset (dstbuf, SIZE * SIZE * 4, 0);
>> > + dest = pixman_image_create_bits (
>> > + PIXMAN_a8r8g8b8, SIZE, SIZE, dstbuf, SIZE * 4);
>> > +
>> > + pixman_image_set_transform (src, xform);
>> > + pixman_image_set_repeat (src, PIXMAN_REPEAT_NORMAL);
>> > + pixman_image_set_filter (src, PIXMAN_FILTER_BILINEAR, NULL, 0);
>> > +
>> > + image_endian_swap (src);
>> > + image_endian_swap (dest);
>> > +
>> > + pixman_image_composite (PIXMAN_OP_SRC,
>> > + src, NULL, dest,
>> > + 0, 0, 0, 0, 0, 0,
>> > + SIZE, SIZE);
>> > +
>> > + crc = compute_crc32_for_image (crc, dest);
>> > +
>> > + pixman_image_unref (src);
>> > + pixman_image_unref (dest);
>> > +
>> > + free (srcbuf);
>> > + free (dstbuf);
>> > +
>> > + return crc;
>> > +}
>> > +
>> > +#if BILINEAR_INTERPOLATION_BITS == 7
>> > +#define CHECKSUM 0x02169677
>> > +#elif BILINEAR_INTERPOLATION_BITS == 4
>> > +#define CHECKSUM 0xE44B29AC
>> > +#else
>> > +#define CHECKSUM 0x00000000
>> > +#endif
>> > +
>> > +int
>> > +main (int argc, const char *argv[])
>> > +{
>> > + const pixman_fixed_t *end = entries + ARRAY_LENGTH (entries);
>> > + const pixman_fixed_t *t0, *t1, *t2, *t3, *t4, *t5;
>> > + uint32_t crc = 0;
>> > +
>> > + prng_srand (0x56EA1DBD);
>> > +
>> > + for (t0 = entries; t0 < end; ++t0)
>> > + {
>> > + for (t1 = entries; t1 < end; ++t1)
>> > + {
>> > + for (t2 = entries; t2 < end; ++t2)
>> > + {
>> > + for (t3 = entries; t3 < end; ++t3)
>> > + {
>> > + for (t4 = entries; t4 < end; ++t4)
>> > + {
>> > + for (t5 = entries; t5 < end; ++t5)
>> > + {
>> > + pixman_transform_t xform = {
>> > + { { *t0, *t1, *t2 },
>> > + { *t3, *t4, *t5 },
>> > + { 0, 0, pixman_fixed_1 } }
>> > + };
>> > +
>> > + crc = test_scale (&xform, crc);
>> > + }
>> > + }
>> > + }
>> > + }
>> > + }
>> > + }
>> > +
>> > + if (crc != CHECKSUM)
>> > + {
>> > + printf ("filter-reduction-test failed! (checksum=0x%08X,
>> > expected 0x%08X)\n", crc, CHECKSUM);
>> > + return 1;
>> > + }
>> > + else
>> > + {
>> > + printf ("filter-reduction-test passed (checksum=0x%08X)\n",
>> > crc);
>> > + return 0;
>> > + }
>> > +}
>> > --
>> > 1.7.11.7
>> >
>> > _______________________________________________
>> > Pixman mailing list
>> > Pixman at lists.freedesktop.org
>> > https://lists.freedesktop.org/mailman/listinfo/pixman
>> _______________________________________________
>> Pixman mailing list
>> Pixman at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/pixman
>
>
This patch is:
Acked-by: Oded Gabbay <oded.gabbay at gmail.com>
More information about the Pixman
mailing list