Blame tests/gdimagepixelate/gdimagepixelate.c

Packit ed3af9
#include "gd.h"
Packit ed3af9
#include "gdtest.h"
Packit ed3af9
Packit ed3af9
#define WIDTH 12
Packit ed3af9
#define BLOCK_SIZE 4
Packit ed3af9
Packit ed3af9
static const int expected_upperleft[][3] = {
Packit ed3af9
	{0x000000, 0x040404, 0x080808},
Packit ed3af9
	{0x303030, 0x343434, 0x383838},
Packit ed3af9
	{0x606060, 0x646464, 0x686868}
Packit ed3af9
};
Packit ed3af9
Packit ed3af9
static const int expected_average[][3] = {
Packit ed3af9
	{0x131313, 0x171717, 0x1b1b1b},
Packit ed3af9
	{0x434343, 0x474747, 0x4b4b4b},
Packit ed3af9
	{0x737373, 0x777777, 0x7b7b7b},
Packit ed3af9
};
Packit ed3af9
Packit ed3af9
#define SETUP_PIXELS(im) do {								\
Packit ed3af9
		int x, y, i = 0;									\
Packit ed3af9
		for (y = 0; y < (im)->sy; y++) {					\
Packit ed3af9
			for (x = 0; x < (im)->sx; x++) {				\
Packit ed3af9
				int p = gdImageColorResolve(im, i, i, i);	\
Packit ed3af9
				gdImageSetPixel(im, x, y, p);				\
Packit ed3af9
				i++;										\
Packit ed3af9
			}												\
Packit ed3af9
		}													\
Packit ed3af9
	} while (0)
Packit ed3af9
Packit ed3af9
#define CHECK_PIXELS(im, expected) do {									\
Packit ed3af9
		int x, y;														\
Packit ed3af9
		for (y = 0; y < (im)->sy; y++) {								\
Packit ed3af9
			for (x = 0; x < (im)->sx; x++) {							\
Packit ed3af9
				int p = gdImageGetPixel(im, x, y);						\
Packit ed3af9
				int r = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]>>16)&0xFF; \
Packit ed3af9
				int g = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]>> 8)&0xFF; \
Packit ed3af9
				int b = ((expected)[y/BLOCK_SIZE][x/BLOCK_SIZE]    )&0xFF; \
Packit ed3af9
				if (r != gdImageRed(im, p)) {							\
Packit ed3af9
					gdTestErrorMsg("Red %x is expected, but %x\n", r, gdImageRed(im, p));	  \
Packit ed3af9
					return 0;											\
Packit ed3af9
				}														\
Packit ed3af9
				if (g != gdImageGreen(im, p)) {							\
Packit ed3af9
					gdTestErrorMsg("Green %x is expected, but %x\n", g, gdImageGreen(im, p)); \
Packit ed3af9
					return 0;											\
Packit ed3af9
				}														\
Packit ed3af9
				if (b != gdImageBlue(im, p)) {							\
Packit ed3af9
					gdTestErrorMsg("Blue %x is expected, but %x\n", b, gdImageBlue(im, p));	  \
Packit ed3af9
					return 0;											\
Packit ed3af9
				}														\
Packit ed3af9
			}															\
Packit ed3af9
		}																\
Packit ed3af9
	} while (0)
Packit ed3af9
Packit ed3af9
static int testPixelate(gdImagePtr im)
Packit ed3af9
{
Packit ed3af9
	if (gdImagePixelate(im, -1, GD_PIXELATE_UPPERLEFT) != 0) return 0;
Packit ed3af9
	if (gdImagePixelate(im, 1, GD_PIXELATE_UPPERLEFT) != 1) return 0;
Packit ed3af9
	if (gdImagePixelate(im, 2, -1) != 0) return 0;
Packit ed3af9
Packit ed3af9
	SETUP_PIXELS(im);
Packit ed3af9
	if (!gdImagePixelate(im, BLOCK_SIZE, GD_PIXELATE_UPPERLEFT)) return 0;
Packit ed3af9
	CHECK_PIXELS(im, expected_upperleft);
Packit ed3af9
Packit ed3af9
	SETUP_PIXELS(im);
Packit ed3af9
	if (!gdImagePixelate(im, BLOCK_SIZE, GD_PIXELATE_AVERAGE)) return 0;
Packit ed3af9
	CHECK_PIXELS(im, expected_average);
Packit ed3af9
Packit ed3af9
	return 1;
Packit ed3af9
}
Packit ed3af9
Packit ed3af9
int main()
Packit ed3af9
{
Packit ed3af9
	gdImagePtr im;
Packit ed3af9
Packit ed3af9
	im = gdImageCreate(WIDTH, WIDTH);
Packit ed3af9
	if (!testPixelate(im)) {
Packit ed3af9
		return 1;
Packit ed3af9
	}
Packit ed3af9
	gdImageDestroy(im);
Packit ed3af9
Packit ed3af9
	im = gdImageCreateTrueColor(WIDTH, WIDTH);
Packit ed3af9
	if (!testPixelate(im)) {
Packit ed3af9
		return 2;
Packit ed3af9
	}
Packit ed3af9
	gdImageDestroy(im);
Packit ed3af9
Packit ed3af9
	return 0;
Packit ed3af9
}