Blame tests/gdimagecolorreplace/gdimagecolorreplace.c

Packit ed3af9
#include <stdio.h>
Packit ed3af9
#include <limits.h>
Packit ed3af9
#include "gd.h"
Packit ed3af9
#include "gdtest.h"
Packit ed3af9
Packit ed3af9
static int callback(gdImagePtr im, int src)
Packit ed3af9
{
Packit ed3af9
	int r, g, b;
Packit ed3af9
Packit ed3af9
	r = gdImageRed(im, src);
Packit ed3af9
	g = gdImageGreen(im, src);
Packit ed3af9
	b = gdImageBlue(im, src);
Packit ed3af9
	if (b & 0xFF) {
Packit ed3af9
		return gdImageColorResolve(im, 0x0F & r, 0x0F & g, 0);
Packit ed3af9
	} else {
Packit ed3af9
		return -1;
Packit ed3af9
	}
Packit ed3af9
}
Packit ed3af9
Packit ed3af9
static void run_tests(gdImagePtr im, int *error)
Packit ed3af9
{
Packit ed3af9
	int black,									\
Packit ed3af9
	white,									\
Packit ed3af9
	cosmic_latte,							\
Packit ed3af9
	cream,									\
Packit ed3af9
	ivory,									\
Packit ed3af9
	magnolia,								\
Packit ed3af9
	old_lace,								\
Packit ed3af9
	seashell,								\
Packit ed3af9
	yellow,									\
Packit ed3af9
	c, d;
Packit ed3af9
	int src[2], dst[2];
Packit ed3af9
	int n;
Packit ed3af9
Packit ed3af9
#define COLOR(name, r, g, b) name = gdImageColorAllocateAlpha(im, r, g, b, gdAlphaOpaque)
Packit ed3af9
	COLOR(black, 0, 0, 0);
Packit ed3af9
	COLOR(white, 0xFF, 0xFF, 0xFF);
Packit ed3af9
	COLOR(cosmic_latte, 0xFF, 0xF8, 0xE7);
Packit ed3af9
	COLOR(cream, 0xFF, 0xFD, 0xD0);
Packit ed3af9
	COLOR(ivory, 0xFF, 0xFF, 0xF0);
Packit ed3af9
	COLOR(magnolia, 0xF8, 0xF4, 0xFF);
Packit ed3af9
	COLOR(old_lace, 0xFD, 0xF5, 0xE6);
Packit ed3af9
	COLOR(seashell, 0xFF, 0xF5, 0xEE);
Packit ed3af9
	COLOR(yellow, 0xFF, 0xFF, 0);
Packit ed3af9
#undef COLOR
Packit ed3af9
Packit ed3af9
#define CHECK_VALUE(n, expected) do {							\
Packit ed3af9
		if (gdTestAssert((n) == (expected)) != 1) {				\
Packit ed3af9
			gdTestErrorMsg("%d is expected, but %d\n", expected, n);\
Packit ed3af9
			*error = -1;										\
Packit ed3af9
		}														\
Packit ed3af9
	} while (0)
Packit ed3af9
Packit ed3af9
#define CHECK_PIXEL(x, y, expected) \
Packit ed3af9
	do {														\
Packit ed3af9
		int pix;												\
Packit ed3af9
		gdImageSetClip(im, 0, 0, 4, 4);							\
Packit ed3af9
		pix = gdImageGetPixel(im, (x), (y));					\
Packit ed3af9
		if (gdTestAssert(pix == (expected)) != 1) {				\
Packit ed3af9
			gdTestErrorMsg("%d is expected, but %d\n", expected, pix);	\
Packit ed3af9
			*error = -1;										\
Packit ed3af9
		}														\
Packit ed3af9
	} while (0)
Packit ed3af9
Packit ed3af9
	c = gdImageColorAllocate(im, 0xFF, 0, 0xFF);
Packit ed3af9
	gdImageFilledRectangle(im, 0, 0, 4, 4, white);
Packit ed3af9
	gdImageFilledRectangle(im, 0, 0, 3, 3, black);
Packit ed3af9
	n = gdImageColorReplace(im, white, c);
Packit ed3af9
	CHECK_VALUE(n, 9);
Packit ed3af9
	CHECK_PIXEL(0, 0, black);
Packit ed3af9
	CHECK_PIXEL(2, 3, black);
Packit ed3af9
	CHECK_PIXEL(4, 4, c);
Packit ed3af9
Packit ed3af9
	gdImageSetClip(im, 1, 1, 3, 3);
Packit ed3af9
	n = gdImageColorReplace(im, black, c);
Packit ed3af9
	CHECK_VALUE(n, 9);
Packit ed3af9
	CHECK_PIXEL(0, 0, black);
Packit ed3af9
	CHECK_PIXEL(2, 3, c);
Packit ed3af9
Packit ed3af9
	src[0] = black;
Packit ed3af9
	src[1] = c;
Packit ed3af9
	dst[0] = c;
Packit ed3af9
	dst[1] = white;
Packit ed3af9
	gdImageSetClip(im, 0, 0, 4, 4);
Packit ed3af9
	n = gdImageColorReplaceArray(im, 2, src, dst);
Packit ed3af9
	CHECK_VALUE(n, 25);
Packit ed3af9
	CHECK_PIXEL(0, 0, c);
Packit ed3af9
	CHECK_PIXEL(2, 3, white);
Packit ed3af9
	CHECK_PIXEL(4, 4, white);
Packit ed3af9
Packit ed3af9
	n = gdImageColorReplaceArray(im, 0, src, dst);
Packit ed3af9
	CHECK_VALUE(n, 0);
Packit ed3af9
	n = gdImageColorReplaceArray(im, -1, src, dst);
Packit ed3af9
	CHECK_VALUE(n, 0);
Packit ed3af9
	n = gdImageColorReplaceArray(im, INT_MAX, src, dst);
Packit ed3af9
	CHECK_VALUE(n, -1);
Packit ed3af9
Packit ed3af9
	gdImageSetClip(im, 1, 1, 4, 4);
Packit ed3af9
	n = gdImageColorReplaceCallback(im, callback);
Packit ed3af9
	CHECK_VALUE(n, 16);
Packit ed3af9
	CHECK_PIXEL(0, 0, c);
Packit ed3af9
	CHECK_PIXEL(0, 4, white);
Packit ed3af9
	d = gdImageColorExact(im, 0x0F, 0x0F, 0);
Packit ed3af9
	if (gdTestAssert(d > 0) != 1) {
Packit ed3af9
		*error = -1;
Packit ed3af9
	}
Packit ed3af9
	CHECK_PIXEL(2, 3, d);
Packit ed3af9
	CHECK_PIXEL(4, 4, d);
Packit ed3af9
Packit ed3af9
#define INITIALIZE_IMAGE()							\
Packit ed3af9
	gdImageSetClip(im, 0, 0, 4, 4);					\
Packit ed3af9
	gdImageFilledRectangle(im, 0, 0, 4, 4, black);	\
Packit ed3af9
	gdImageFilledRectangle(im, 1, 1, 3, 3, white);	\
Packit ed3af9
	gdImageSetPixel(im, 1, 1, cosmic_latte);		\
Packit ed3af9
	gdImageSetPixel(im, 1, 2, cream);				\
Packit ed3af9
	gdImageSetPixel(im, 2, 1, ivory);				\
Packit ed3af9
	gdImageSetPixel(im, 2, 2, magnolia);			\
Packit ed3af9
	gdImageSetPixel(im, 3, 1, old_lace);			\
Packit ed3af9
	gdImageSetPixel(im, 3, 2, seashell)
Packit ed3af9
Packit ed3af9
	INITIALIZE_IMAGE();
Packit ed3af9
	n = gdImageColorReplaceThreshold(im, white, yellow, 2.0);
Packit ed3af9
	CHECK_VALUE(n, 9);
Packit ed3af9
	CHECK_PIXEL(0, 0, black);
Packit ed3af9
	CHECK_PIXEL(1, 1, yellow);
Packit ed3af9
	CHECK_PIXEL(2, 2, yellow);
Packit ed3af9
	CHECK_PIXEL(3, 3, yellow);
Packit ed3af9
Packit ed3af9
#undef INITIALIZE_IMAGE
Packit ed3af9
#undef CHECK_VALUE
Packit ed3af9
#undef CHECK_PIXEL
Packit ed3af9
}
Packit ed3af9
Packit ed3af9
int main()
Packit ed3af9
{
Packit ed3af9
	gdImagePtr im;
Packit ed3af9
	int error = 0;
Packit ed3af9
Packit ed3af9
	gdSetErrorMethod(gdSilence);
Packit ed3af9
Packit ed3af9
	/* true color */
Packit ed3af9
	im = gdImageCreateTrueColor(5, 5);
Packit ed3af9
	run_tests(im, &error);
Packit ed3af9
	gdImageDestroy(im);
Packit ed3af9
Packit ed3af9
	/* palette */
Packit ed3af9
	im = gdImageCreate(5, 5);
Packit ed3af9
	run_tests(im, &error);
Packit ed3af9
	gdImageDestroy(im);
Packit ed3af9
Packit ed3af9
	return error;
Packit ed3af9
}