summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2025-04-25 10:53:19 +0200
committerMitya Selivanov <automainint@guattari.tech>2025-04-25 10:53:19 +0200
commit9251ce60ba4f68e813bd2c6fd06f7574e8b1f448 (patch)
tree4280aca7208b9473e0212d8c6bca4e9fd4928e4c
parent6ac5d2296a48db38f464cd22f4e489dc7dbcf642 (diff)
downloadreduced_system_layer-9251ce60ba4f68e813bd2c6fd06f7574e8b1f448.zip
Add text rendering tests
-rw-r--r--graphics.c180
1 files changed, 180 insertions, 0 deletions
diff --git a/graphics.c b/graphics.c
index 5e9790e..38bbd7c 100644
--- a/graphics.c
+++ b/graphics.c
@@ -2734,6 +2734,186 @@ TEST("text digits 42") {
REQUIRE(ok);
}
+TEST("text cursor") {
+ i64 w = 10;
+ i64 h = 10;
+
+ vec4_f32 pixels[100] = {0};
+
+ draw_text_cursor_to_buffer(
+ (Pixel_Buffer) {
+ .width = w,
+ .height = h,
+ .stride = w,
+ .pixels = pixels,
+ },
+ 0,
+ (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, },
+ (Box) { .x = 1.0, .y = 1.0, .width = 8.1, .height = 6.1, },
+ (vec2) { .x = 10.0, .y = 10.0, },
+ 2,
+ (c32[2]) { 'a', 'a', },
+ 1,
+ 0
+ );
+
+ // printf("\n");
+ // for (i64 j = 0; j < h; ++j) {
+ // for (i64 i = 0; i < w; ++i) {
+ // printf(" %c", pixels[j * w + i].x > 0.5 ? 'x' : '.');
+ // }
+ // printf("\n");
+ // }
+ // printf("\n");
+
+ b8 expect_bits[100] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 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,
+ };
+
+ 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 selection forward") {
+ i64 w = 10;
+ i64 h = 10;
+
+ vec4_f32 pixels[100] = {0};
+
+ draw_text_cursor_to_buffer(
+ (Pixel_Buffer) {
+ .width = w,
+ .height = h,
+ .stride = w,
+ .pixels = pixels,
+ },
+ 0,
+ (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, },
+ (Box) { .x = 1.0, .y = 1.0, .width = 8.1, .height = 6.1, },
+ (vec2) { .x = 3.0, .y = 2.0, },
+ 14,
+ (c32[14]) { 'a', 'a', 'a', 'a', '\n', 'b', 'b', 'b', 'b', '\n', 'c', 'c', 'c', 'c', },
+ 2,
+ 10
+ );
+
+ // printf("\n");
+ // for (i64 j = 0; j < h; ++j) {
+ // for (i64 i = 0; i < w; ++i) {
+ // printf(" %c", pixels[j * w + i].x > 0.5 ? 'x' : '.');
+ // }
+ // printf("\n");
+ // }
+ // printf("\n");
+
+ b8 expect_bits[100] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0,
+ 0, 1, 1, 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,
+ };
+
+ 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 selection backward") {
+ i64 w = 10;
+ i64 h = 10;
+
+ vec4_f32 pixels[100] = {0};
+
+ draw_text_cursor_to_buffer(
+ (Pixel_Buffer) {
+ .width = w,
+ .height = h,
+ .stride = w,
+ .pixels = pixels,
+ },
+ 0,
+ (vec4_f32) { 1.0f, 1.0f, 1.0f, 1.0f, },
+ (Box) { .x = 1.0, .y = 1.0, .width = 8.1, .height = 6.1, },
+ (vec2) { .x = 3.0, .y = 2.0, },
+ 14,
+ (c32[14]) { 'a', 'a', 'a', 'a', '\n', 'b', 'b', 'b', 'b', '\n', 'c', 'c', 'c', 'c', },
+ 12,
+ -10
+ );
+
+ // printf("\n");
+ // for (i64 j = 0; j < h; ++j) {
+ // for (i64 i = 0; i < w; ++i) {
+ // printf(" %c", pixels[j * w + i].x > 0.5 ? 'x' : '.');
+ // }
+ // printf("\n");
+ // }
+ // printf("\n");
+
+ b8 expect_bits[100] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,
+ 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0,
+ 0, 1, 1, 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,
+ };
+
+ 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);
+}
+
#undef TEST_FILE
#endif // ENABLE_TESTING