1 #include "gd.h"
2 #include "gdtest.h"
3 
main()4 int main()
5 {
6 	gdImagePtr src, dst;
7 	int r, g, b;
8 	void *p;
9 	int size = 0;
10 	int status = 0;
11 	CuTestImageResult result = {0, 0};
12 
13 	src = gdImageCreate(100, 100);
14 	if (src == NULL) {
15 		gdTestErrorMsg("could not create src\n");
16 		return 1;
17 	}
18 	r = gdImageColorAllocate(src, 0xFF, 0, 0);
19 	g = gdImageColorAllocate(src, 0, 0xFF, 0);
20 	b = gdImageColorAllocate(src, 0, 0, 0xFF);
21 	gdImageFilledRectangle(src, 0, 0, 99, 99, r);
22 	gdImageRectangle(src, 20, 20, 79, 79, g);
23 	gdImageEllipse(src, 70, 25, 30, 20, b);
24 
25 #define OUTPUT_PNG(name) do {							\
26 		FILE *fp = gdTestTempFp();						\
27 		gdImagePng(name, fp);							\
28 		fclose(fp);										\
29 	} while (0)
30 
31 	OUTPUT_PNG(src);
32 	p = gdImagePngPtr(src, &size);
33 	if (p == NULL) {
34 		status = 1;
35 		gdTestErrorMsg("p is null\n");
36 		goto door0;
37 	}
38 	if (size <= 0) {
39 		status = 1;
40 		gdTestErrorMsg("size is non-positive\n");
41 		goto door1;
42 	}
43 
44 	dst = gdImageCreateFromPngPtr(size, p);
45 	if (dst == NULL) {
46 		status = 1;
47 		gdTestErrorMsg("could not create dst\n");
48 		goto door1;
49 	}
50 	OUTPUT_PNG(dst);
51 	gdTestImageDiff(src, dst, NULL, &result);
52 	if (result.pixels_changed > 0) {
53 		status = 1;
54 		gdTestErrorMsg("pixels changed: %d\n", result.pixels_changed);
55 	}
56 	gdImageDestroy(dst);
57 door1:
58 	gdFree(p);
59 door0:
60 	gdImageDestroy(src);
61 	return status;
62 }
63