summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2025-04-20 23:37:51 +0200
committerMitya Selivanov <automainint@guattari.tech>2025-04-20 23:37:51 +0200
commitbb296d4d79e0de7e93f3c0e729b8dc1dcf0c4bb6 (patch)
tree046ce808e17490d3e1da1160393d238475bdfc77
parentca73b12180ad0dd38e73f19bab81807a43460451 (diff)
downloadreduced_system_layer-bb296d4d79e0de7e93f3c0e729b8dc1dcf0c4bb6.zip
Add rectangle tests
-rwxr-xr-xgraphics.c211
1 files changed, 192 insertions, 19 deletions
diff --git a/graphics.c b/graphics.c
index 97f4518..b03e37d 100755
--- a/graphics.c
+++ b/graphics.c
@@ -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) { }