[Pixman] [PATCH 02/14] Add new test of filter reduction from BILINEAR to NEAREST

Bill Spitzak spitzak at gmail.com
Fri Apr 29 18:01:47 UTC 2016


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pixman/attachments/20160429/a933f029/attachment-0001.html>


More information about the Pixman mailing list