2020-08-21 00:13:11 -04:00

85 lines
2.4 KiB
C

#include <unity.h>
#include <canvas.h>
void setUp() {}
void tearDown() {}
void validate_colors(CANVAS_Canvas* canvas, double r, double g, double b) {
for (uint x=0; x < canvas->width; x++)
for (uint y=0; y < canvas->height; y++) {
TUPLES_Color* c = CANVAS_read_pixel(canvas, x, y);
TEST_ASSERT_EQUAL_DOUBLE(r, c->red);
TEST_ASSERT_EQUAL_DOUBLE(g, c->green);
TEST_ASSERT_EQUAL_DOUBLE(b, c->blue);
}
}
void test_canvas_new()
{
CANVAS_Canvas* canvas = CANVAS_new(10, 20);
validate_colors(canvas, 0, 0, 0);
CANVAS_delete(canvas);
}
void test_canvas_init()
{
CANVAS_Canvas canvas;
CANVAS_init(&canvas, 10, 20);
validate_colors(&canvas, 0, 0, 0);
CANVAS_destroy(&canvas);
}
void test_canvas_write_pixel()
{
CANVAS_Canvas canvas;
CANVAS_init(&canvas, 10, 20);
TUPLES_Color red = TUPLES_color(1, 0, 0);
CANVAS_write_pixel(&canvas, 5, 5, red);
TUPLES_Color* pxlcolor = CANVAS_read_pixel(&canvas, 5, 5);
TEST_ASSERT_EQUAL_DOUBLE(1, pxlcolor->red);
TEST_ASSERT_EQUAL_DOUBLE(0, pxlcolor->green);
TEST_ASSERT_EQUAL_DOUBLE(0, pxlcolor->blue);
CANVAS_destroy(&canvas);
}
void test_canvas_get_ppm_header()
{
CANVAS_Canvas canvas;
CANVAS_init(&canvas, 5, 3);
char* header = CANVAS_get_ppm_header_string(&canvas);
TEST_ASSERT_NOT_EMPTY(header);
TEST_ASSERT_EQUAL_STRING("P3\n5 3\n255\n", header);
free(header);
CANVAS_destroy(&canvas);
}
void test_canvas_get_ppm_body()
{
CANVAS_Canvas canvas;
CANVAS_init(&canvas, 5, 3);
TUPLES_Color c1 = TUPLES_color(1.5, 0, 0);
TUPLES_Color c2 = TUPLES_color(0, 0.5, 0);
TUPLES_Color c3 = TUPLES_color(-0.5, 0, 1);
CANVAS_write_pixel(&canvas, 0, 0, c1);
CANVAS_write_pixel(&canvas, 2, 1, c2);
CANVAS_write_pixel(&canvas, 4, 2, c3);
char* body = CANVAS_get_ppm_body_string(&canvas);
TEST_ASSERT_NOT_EMPTY(body);
TEST_ASSERT_EQUAL_STRING("255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 \n"
"0 0 0 0 0 0 0 128 0 0 0 0 0 0 0 \n"
"0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 \n\n", body);
free(body);
CANVAS_destroy(&canvas);
}
int main(void)
{
UNITY_BEGIN();
RUN_TEST(test_canvas_new);
RUN_TEST(test_canvas_init);
RUN_TEST(test_canvas_write_pixel);
RUN_TEST(test_canvas_get_ppm_header);
RUN_TEST(test_canvas_get_ppm_body);
return UNITY_END();
}