Blame tests/gdimagerectangle/point_ordering.c

Packit ed3af9
/**
Packit ed3af9
 * Test point ordering of gdImageRectangle()
Packit ed3af9
 *
Packit ed3af9
 * We're testing the two allowed point orders with and without thickness,
Packit ed3af9
 * and verify that all sides of the rectangle are drawn.
Packit ed3af9
 *
Packit ed3af9
 * See also <https://github.com/libgd/libgd/issues/177>
Packit ed3af9
 */
Packit ed3af9
Packit ed3af9
Packit ed3af9
#include "gd.h"
Packit ed3af9
#include "gdtest.h"
Packit ed3af9
Packit ed3af9
Packit ed3af9
static void draw_and_check_rectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int black, int red);
Packit ed3af9
static void draw_and_check_pixel(gdImagePtr im, int x, int y, int black, int red);
Packit ed3af9
Packit ed3af9
Packit ed3af9
int main()
Packit ed3af9
{
Packit ed3af9
    gdImagePtr im;
Packit ed3af9
    int black, red;
Packit ed3af9
Packit ed3af9
    im = gdImageCreate(110, 210);
Packit ed3af9
    gdImageColorAllocate(im, 255, 255, 255);
Packit ed3af9
    black = gdImageColorAllocate(im,   0,   0,   0);
Packit ed3af9
    red   = gdImageColorAllocate(im, 255,   0,   0);
Packit ed3af9
Packit ed3af9
    draw_and_check_rectangle(im,  10,  10,  50,  50, black, red);
Packit ed3af9
    draw_and_check_rectangle(im,  50, 150,  10, 110, black, red);
Packit ed3af9
    gdImageSetThickness(im, 4);
Packit ed3af9
    draw_and_check_rectangle(im,  60,  10, 100,  50, black, red);
Packit ed3af9
    draw_and_check_rectangle(im, 100, 150,  60, 110, black, red);
Packit ed3af9
Packit ed3af9
#if 0
Packit ed3af9
    /* save image for debugging purposes */
Packit ed3af9
    do {
Packit ed3af9
        char *path;
Packit ed3af9
        FILE *fp;
Packit ed3af9
Packit ed3af9
        path = gdTestFilePath2("gdimagerectangle", "point_ordering.png");
Packit ed3af9
        fp = fopen(path, "wb");
Packit ed3af9
        gdImagePng(im, fp);
Packit ed3af9
        fclose(fp);
Packit ed3af9
        gdFree(path);
Packit ed3af9
    } while(0);
Packit ed3af9
#endif
Packit ed3af9
Packit ed3af9
    gdImageDestroy(im);
Packit ed3af9
Packit ed3af9
    return gdNumFailures();
Packit ed3af9
}
Packit ed3af9
Packit ed3af9
Packit ed3af9
static void draw_and_check_rectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int black, int red)
Packit ed3af9
{
Packit ed3af9
    int x, y;
Packit ed3af9
Packit ed3af9
    gdImageRectangle(im, x1, y1, x2, y2, black);
Packit ed3af9
    x = (x1 + x2) / 2;
Packit ed3af9
    y = (y1 + y2) / 2;
Packit ed3af9
    draw_and_check_pixel(im, x,  y1, black, red);
Packit ed3af9
    draw_and_check_pixel(im, x1, y,  black, red);
Packit ed3af9
    draw_and_check_pixel(im, x,  y2, black, red);
Packit ed3af9
    draw_and_check_pixel(im, x2, y,  black, red);
Packit ed3af9
}
Packit ed3af9
Packit ed3af9
Packit ed3af9
static void draw_and_check_pixel(gdImagePtr im, int x, int y, int black, int red)
Packit ed3af9
{
Packit ed3af9
    int color;
Packit ed3af9
Packit ed3af9
    color = gdImagePalettePixel(im, x, y);
Packit ed3af9
    gdTestAssertMsg(color == black, "expected color %d, but got color %d\n", black, color);
Packit ed3af9
    gdImageSetPixel(im, x, y, red);
Packit ed3af9
}