diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2025-04-20 23:37:51 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2025-04-20 23:37:51 +0200 |
commit | bb296d4d79e0de7e93f3c0e729b8dc1dcf0c4bb6 (patch) | |
tree | 046ce808e17490d3e1da1160393d238475bdfc77 | |
parent | ca73b12180ad0dd38e73f19bab81807a43460451 (diff) | |
download | reduced_system_layer-bb296d4d79e0de7e93f3c0e729b8dc1dcf0c4bb6.zip |
Add rectangle tests
-rwxr-xr-x | graphics.c | 211 |
1 files changed, 192 insertions, 19 deletions
@@ -2252,6 +2252,174 @@ TEST("colors") { REQUIRE_EQ((purple.z + 2e-7) * 100, 100); } +TEST("rectangle corners") { + i64 w = 10; + i64 h = 10; + + vec4_f32 pixels[100] = {0}; + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = -1, .y = -1, .width = 2, .height = 2, } + ); + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 9, .y = -1, .width = 2, .height = 2, } + ); + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = -1, .y = 9, .width = 2, .height = 2, } + ); + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 9, .y = 9, .width = 2, .height = 2, } + ); + + b8 expect_bits[100] = { + 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, + }; + + b8 ok = 1; + + for (i64 i = 0; i < w * h; ++i) { + if (expect_bits[i] != (pixels[i].x > 0.5) || + expect_bits[i] != (pixels[i].y > 0.5) || + expect_bits[i] != (pixels[i].z > 0.5) || + expect_bits[i] != (pixels[i].w > 0.5)) { + ok = 0; + break; + } + } + + REQUIRE(ok); +} + +TEST("rectangle middle") { + i64 w = 10; + i64 h = 10; + + vec4_f32 pixels[100] = {0}; + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 1, .y = 1, .width = 8, .height = 8, } + ); + + b8 expect_bits[100] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + + b8 ok = 1; + + for (i64 i = 0; i < w * h; ++i) { + if (expect_bits[i] != (pixels[i].x > 0.5) || + expect_bits[i] != (pixels[i].y > 0.5) || + expect_bits[i] != (pixels[i].z > 0.5) || + expect_bits[i] != (pixels[i].w > 0.5)) { + ok = 0; + break; + } + } + + REQUIRE(ok); +} + +TEST("rectangle aliasing") { + i64 w = 10; + i64 h = 10; + + vec4_f32 pixels[100] = {0}; + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 1.4, .y = 1.4, .width = 2.0, .height = 2.0, } + ); + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 4.0, .y = 1.0, .width = 2.4, .height = 2.4, } + ); + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 6.6, .y = 1.0, .width = 2.0, .height = 2.0, } + ); + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 1.0, .y = 3.6, .width = 2.0, .height = 2.0, } + ); + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 4.0, .y = 4.0, .width = 2.4, .height = 2.4, } + ); + + fill_rectangle_to_buffer( + (Pixel_Buffer) { .width = w, .height = h, .stride = w, .pixels = pixels }, + (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, }, + (Box) { .x = 7.4, .y = 4.4, .width = 1.2, .height = 1.2, } + ); + + b8 expect_bits[100] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + + b8 ok = 1; + + for (i64 i = 0; i < w * h; ++i) { + if (expect_bits[i] != (pixels[i].x > 0.5) || + expect_bits[i] != (pixels[i].y > 0.5) || + expect_bits[i] != (pixels[i].z > 0.5) || + expect_bits[i] != (pixels[i].w > 0.5)) { + ok = 0; + break; + } + } + + REQUIRE(ok); +} + TEST("text letter A") { i64 w = 10; i64 h = 10; @@ -2260,9 +2428,9 @@ TEST("text letter A") { draw_text_area_to_buffer( (Pixel_Buffer) { - .width = 10, - .height = 10, - .stride = 10, + .width = w, + .height = h, + .stride = w, .pixels = pixels, }, 0, @@ -2286,15 +2454,19 @@ TEST("text letter A") { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; + b8 ok = 1; + for (i64 i = 0; i < w * h; ++i) { if (expect_bits[i] != (pixels[i].x > 0.5) || expect_bits[i] != (pixels[i].y > 0.5) || expect_bits[i] != (pixels[i].z > 0.5) || expect_bits[i] != (pixels[i].w > 0.5)) { - REQUIRE(0); + ok = 0; break; } } + + REQUIRE(ok); } TEST("text letter z") { @@ -2305,9 +2477,9 @@ TEST("text letter z") { draw_text_area_to_buffer( (Pixel_Buffer) { - .width = 10, - .height = 10, - .stride = 10, + .width = w, + .height = h, + .stride = w, .pixels = pixels, }, 0, @@ -2331,15 +2503,19 @@ TEST("text letter z") { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; + b8 ok = 1; + for (i64 i = 0; i < w * h; ++i) { if (expect_bits[i] != (pixels[i].x > 0.5) || expect_bits[i] != (pixels[i].y > 0.5) || expect_bits[i] != (pixels[i].z > 0.5) || expect_bits[i] != (pixels[i].w > 0.5)) { - REQUIRE(0); + ok = 0; break; } } + + REQUIRE(ok); } TEST("text digits 42") { @@ -2350,9 +2526,9 @@ TEST("text digits 42") { draw_text_area_to_buffer( (Pixel_Buffer) { - .width = 10, - .height = 10, - .stride = 10, + .width = w, + .height = h, + .stride = w, .pixels = pixels, }, 0, @@ -2376,23 +2552,20 @@ TEST("text digits 42") { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; + b8 ok = 1; + for (i64 i = 0; i < w * h; ++i) { if (expect_bits[i] != (pixels[i].x > 0.5) || expect_bits[i] != (pixels[i].y > 0.5) || expect_bits[i] != (pixels[i].z > 0.5) || expect_bits[i] != (pixels[i].w > 0.5)) { - REQUIRE(0); + ok = 0; break; } } -} -static Pixel_Buffer _test_pixels = { - .width = 1280, - .height = 720, - .stride = 1280, - .pixels = (vec4_f32[1280 * 720]) {0}, -}; + REQUIRE(ok); +} #ifndef EVERY_TEST_SUITE void update_and_render_frame(void) { } |