On Tue, Apr 12, 2016 at 5:36 AM, Søren Sandmann Pedersen <soren.sandm...@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.sandm...@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 > + 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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/pixman _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pixman