diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2025-04-25 10:53:19 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2025-04-25 10:53:19 +0200 |
commit | 9251ce60ba4f68e813bd2c6fd06f7574e8b1f448 (patch) | |
tree | 4280aca7208b9473e0212d8c6bca4e9fd4928e4c | |
parent | 6ac5d2296a48db38f464cd22f4e489dc7dbcf642 (diff) | |
download | reduced_system_layer-9251ce60ba4f68e813bd2c6fd06f7574e8b1f448.zip |
Add text rendering tests
-rw-r--r-- | graphics.c | 180 |
1 files changed, 180 insertions, 0 deletions
@@ -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 |