diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2025-04-16 19:26:41 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2025-04-16 19:26:41 +0200 |
commit | e748e39c669506cfcb2eb8f2549dfd201d6a6b53 (patch) | |
tree | 08f2b0a470d722991c3b67ef16117787826ef2de | |
parent | 2e169096003edab21b6720a25342529b1c7e12f0 (diff) | |
download | reduced_system_layer-e748e39c669506cfcb2eb8f2549dfd201d6a6b53.zip |
Add tests
-rwxr-xr-x | reduced_system_layer.c | 291 | ||||
-rw-r--r-- | test.c | 2 |
2 files changed, 288 insertions, 5 deletions
diff --git a/reduced_system_layer.c b/reduced_system_layer.c index f34c03d..0240f08 100755 --- a/reduced_system_layer.c +++ b/reduced_system_layer.c @@ -59,6 +59,7 @@ #/ - Labyrinth #/ - Chat #/ - Graphics +#/ - Gamma correction #/ - Custom fonts - integrate stb_truetype.h #/ - UI #/ - Icons @@ -634,6 +635,7 @@ typedef struct { i32 antialiasing_scale; b8 exact_resolution : 1; + b8 disable_gamma : 1; // TODO b8 graceful_shutdown : 1; b8 enable_clipboard_text : 1; b8 enable_clipboard_image : 1; @@ -1646,7 +1648,7 @@ static i64 average_frame_duration_(i64 duration) { durs[j] = t; } - if (AVERAGE_FRAME_BIAS < 0. || AVERAGE_FRAME_BIAS > 1.) + if (AVERAGE_FRAME_BIAS < 0.0 || AVERAGE_FRAME_BIAS > 1.0) return durs[0]; return durs[(i64) ((NUM_FRAMES_AVERAGED - 1) * AVERAGE_FRAME_BIAS)]; @@ -1669,7 +1671,7 @@ static b8 pixel_size_update_(i64 real_width, i64 real_height) { b8 size_changed = 0; if (g_platform.antialiasing_scale <= 0) g_platform.antialiasing_scale = DEFAULT_ANTIALIASING_SCALE; - if (g_platform.pixel_size <= .0) g_platform.pixel_size = DEFAULT_PIXEL_SIZE; + if (g_platform.pixel_size <= 0.0) g_platform.pixel_size = DEFAULT_PIXEL_SIZE; if (g_platform.pixel_size < MIN_PIXEL_SIZE) g_platform.pixel_size = MIN_PIXEL_SIZE; if (g_platform.pixel_size > MAX_PIXEL_SIZE) g_platform.pixel_size = MAX_PIXEL_SIZE; @@ -2061,7 +2063,7 @@ void *dynamic_library_get_proc_address(u16 slot, c8 *proc) { // // ================================================================ // -// Unix +// Time // // ================================================================ @@ -4606,7 +4608,288 @@ __attribute__((export_name("js_drop_data"))) void *js_drop_data(void) { #define TEST_FILE reduced_system_layer #include "test.c" -TEST("TODO") { +TEST("types sanity basic") { + REQUIRE_EQ(sizeof(i8), 1); + REQUIRE_EQ(sizeof(i16), 2); + REQUIRE_EQ(sizeof(i32), 4); + REQUIRE_EQ(sizeof(i64), 8); + REQUIRE_EQ(sizeof(u8), 1); + REQUIRE_EQ(sizeof(u16), 2); + REQUIRE_EQ(sizeof(u32), 4); + REQUIRE_EQ(sizeof(u64), 8); + REQUIRE_EQ(sizeof(c8), 1); + REQUIRE_EQ(sizeof(c32), 4); + REQUIRE_EQ(sizeof(b8), 1); + REQUIRE_EQ(sizeof(f32), 4); + REQUIRE_EQ(sizeof(f64), 8); +} + +TEST("types sanity vector") { + vec2 a = { 1.0, 2.0, }; + vec3 b = { 1.0, 2.0, 3.0, }; + vec4 c = { 1.0, 2.0, 3.0, 4.0, }; + + vec2_f32 d = { 1.0f, 2.0f, }; + vec3_f32 e = { 1.0f, 2.0f, 3.0f, }; + vec4_f32 f = { 1.0f, 2.0f, 3.0f, 4.0f, }; + + vec2_i64 g = { 1, 2, }; + vec3_i64 h = { 1, 2, 3, }; + vec4_i64 i = { 1, 2, 3, 4, }; + + REQUIRE(a.x == 1.0); + REQUIRE(a.y == 2.0); + REQUIRE(b.x == 1.0); + REQUIRE(b.y == 2.0); + REQUIRE(b.z == 3.0); + REQUIRE(c.x == 1.0); + REQUIRE(c.y == 2.0); + REQUIRE(c.z == 3.0); + REQUIRE(c.w == 4.0); + + REQUIRE(d.x == 1.0f); + REQUIRE(d.y == 2.0f); + REQUIRE(e.x == 1.0f); + REQUIRE(e.y == 2.0f); + REQUIRE(e.z == 3.0f); + REQUIRE(f.x == 1.0f); + REQUIRE(f.y == 2.0f); + REQUIRE(f.z == 3.0f); + REQUIRE(f.w == 4.0f); + + REQUIRE_EQ(g.x, 1); + REQUIRE_EQ(g.y, 2); + REQUIRE_EQ(h.x, 1); + REQUIRE_EQ(h.y, 2); + REQUIRE_EQ(h.z, 3); + REQUIRE_EQ(i.x, 1); + REQUIRE_EQ(i.y, 2); + REQUIRE_EQ(i.z, 3); + REQUIRE_EQ(i.w, 4); +} + +TEST("types sanity matrix") { + mat2 j = { 1.0, 2.0, 3.0, 4.0, }; + mat3 k = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, }; + mat4 l = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, }; + + mat2_f32 m = { 1.0, 2.0, 3.0, 4.0, }; + mat3_f32 n = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, }; + mat4_f32 o = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, }; + + REQUIRE(j.m[0][0] == 1.0); + REQUIRE(j.m[0][1] == 2.0); + REQUIRE(j.m[1][0] == 3.0); + REQUIRE(j.m[1][1] == 4.0); + + REQUIRE(k.m[0][0] == 1.0); + REQUIRE(k.m[0][1] == 2.0); + REQUIRE(k.m[0][2] == 3.0); + REQUIRE(k.m[1][0] == 4.0); + REQUIRE(k.m[1][1] == 5.0); + REQUIRE(k.m[1][2] == 6.0); + REQUIRE(k.m[2][0] == 7.0); + REQUIRE(k.m[2][1] == 8.0); + REQUIRE(k.m[2][2] == 9.0); + + REQUIRE(l.m[0][0] == 1.0); + REQUIRE(l.m[0][1] == 2.0); + REQUIRE(l.m[0][2] == 3.0); + REQUIRE(l.m[0][3] == 4.0); + REQUIRE(l.m[1][0] == 5.0); + REQUIRE(l.m[1][1] == 6.0); + REQUIRE(l.m[1][2] == 7.0); + REQUIRE(l.m[1][3] == 8.0); + REQUIRE(l.m[2][0] == 9.0); + REQUIRE(l.m[2][1] == 10.0); + REQUIRE(l.m[2][2] == 11.0); + REQUIRE(l.m[2][3] == 12.0); + REQUIRE(l.m[3][0] == 13.0); + REQUIRE(l.m[3][1] == 14.0); + REQUIRE(l.m[3][2] == 15.0); + REQUIRE(l.m[3][3] == 16.0); + + REQUIRE(m.m[0][0] == 1.0f); + REQUIRE(m.m[0][1] == 2.0f); + REQUIRE(m.m[1][0] == 3.0f); + REQUIRE(m.m[1][1] == 4.0f); + + REQUIRE(n.m[0][0] == 1.0f); + REQUIRE(n.m[0][1] == 2.0f); + REQUIRE(n.m[0][2] == 3.0f); + REQUIRE(n.m[1][0] == 4.0f); + REQUIRE(n.m[1][1] == 5.0f); + REQUIRE(n.m[1][2] == 6.0f); + REQUIRE(n.m[2][0] == 7.0f); + REQUIRE(n.m[2][1] == 8.0f); + REQUIRE(n.m[2][2] == 9.0f); + + REQUIRE(o.m[0][0] == 1.0f); + REQUIRE(o.m[0][1] == 2.0f); + REQUIRE(o.m[0][2] == 3.0f); + REQUIRE(o.m[0][3] == 4.0f); + REQUIRE(o.m[1][0] == 5.0f); + REQUIRE(o.m[1][1] == 6.0f); + REQUIRE(o.m[1][2] == 7.0f); + REQUIRE(o.m[1][3] == 8.0f); + REQUIRE(o.m[2][0] == 9.0f); + REQUIRE(o.m[2][1] == 10.0f); + REQUIRE(o.m[2][2] == 11.0f); + REQUIRE(o.m[2][3] == 12.0f); + REQUIRE(o.m[3][0] == 13.0f); + REQUIRE(o.m[3][1] == 14.0f); + REQUIRE(o.m[3][2] == 15.0f); + REQUIRE(o.m[3][3] == 16.0f); +} + +TEST("math sanity") { + REQUIRE(floor(1.99) == 1.0); + REQUIRE(floor(-1.01) == -2.0); + REQUIRE(ceil(1.01) == 2.0); + REQUIRE(ceil(-1.99) == -1.0); + REQUIRE(trunc(1.99) == 1.0); + REQUIRE(trunc(-1.99) == -1.0); + REQUIRE(sqrt(4.0) > 2.0 - 1e-13); + REQUIRE(sqrt(4.0) < 2.0 + 1e-13); + REQUIRE(cbrt(8.0) > 2.0 - 1e-13); + REQUIRE(cbrt(8.0) < 2.0 + 1e-13); + REQUIRE(pow(2.0, 3.0) > 8.0 - 1e-13); + REQUIRE(pow(2.0, 3.0) < 8.0 + 1e-13); + REQUIRE(log(M_E * M_E) > 2.0 - 1e-13); + REQUIRE(log(M_E * M_E) < 2.0 + 1e-13); + REQUIRE(log2(8.0) > 3.0 - 1e-13); + REQUIRE(log2(8.0) < 3.0 + 1e-13); + REQUIRE(log10(1000.0) > 3.0 - 1e-13); + REQUIRE(log10(1000.0) < 3.0 + 1e-13); + REQUIRE(exp(2.0) > M_E * M_E - 1e-13); + REQUIRE(exp(2.0) < M_E * M_E + 1e-13); + REQUIRE(sin(M_PI / 6.0) > 0.5 - 1e-13); + REQUIRE(sin(M_PI / 6.0) < 0.5 + 1e-13); + REQUIRE(cos(M_PI / 3.0) > 0.5 - 1e-13); + REQUIRE(cos(M_PI / 3.0) < 0.5 + 1e-13); + REQUIRE(tan(M_PI / 4.0) > 1.0 - 1e-13); + REQUIRE(tan(M_PI / 4.0) < 1.0 + 1e-13); + REQUIRE(asin(0.5) > M_PI / 6.0 - 1e-13); + REQUIRE(asin(0.5) < M_PI / 6.0 + 1e-13); + REQUIRE(acos(0.5) > M_PI / 3.0 - 1e-13); + REQUIRE(acos(0.5) < M_PI / 3.0 + 1e-13); + REQUIRE(atan(1.0) > M_PI / 4.0 - 1e-13); + REQUIRE(atan(1.0) < M_PI / 4.0 + 1e-13); + REQUIRE(atan2(1.0, 1.0) > M_PI / 4 - 1e-13); + REQUIRE(atan2(1.0, 1.0) < M_PI / 4 + 1e-13); + REQUIRE(atan2(1.0, -1.0) > M_PI * 3.0 / 4 - 1e-13); + REQUIRE(atan2(1.0, -1.0) < M_PI * 3.0 / 4 + 1e-13); + REQUIRE(atan2(-1.0, 1.0) > -M_PI / 4 - 1e-13); + REQUIRE(atan2(-1.0, 1.0) < -M_PI / 4 + 1e-13); + REQUIRE(atan2(-1.0, -1.0) > -M_PI * 3.0 / 4 - 1e-13); + REQUIRE(atan2(-1.0, -1.0) < -M_PI * 3.0 / 4 + 1e-13); + REQUIRE(log(2.0) > M_LOG_2 - 1e-13); + REQUIRE(log(2.0) < M_LOG_2 + 1e-13); + REQUIRE(log(10.0) > M_LOG_10 - 1e-13); + REQUIRE(log(10.0) < M_LOG_10 + 1e-13); + REQUIRE(log2(M_E) > M_LOG2_E - 1e-13); + REQUIRE(log2(M_E) < M_LOG2_E + 1e-13); + REQUIRE(log10(M_E) > M_LOG10_E - 1e-13); + REQUIRE(log10(M_E) < M_LOG10_E + 1e-13); + REQUIRE(log(M_PI) > M_LOG_PI - 1e-13); + REQUIRE(log(M_PI) < M_LOG_PI + 1e-13); + REQUIRE(sqrt(2.0) > M_SQRT_2 - 1e-13); + REQUIRE(sqrt(2.0) < M_SQRT_2 + 1e-13); + REQUIRE(sqrt(3.0) > M_SQRT_3 - 1e-13); + REQUIRE(sqrt(3.0) < M_SQRT_3 + 1e-13); + REQUIRE(sqrt(M_PI) > M_SQRT_PI - 1e-13); + REQUIRE(sqrt(M_PI) < M_SQRT_PI + 1e-13); + REQUIRE(sqrt(M_E) > M_SQRT_E - 1e-13); + REQUIRE(sqrt(M_E) < M_SQRT_E + 1e-13); + REQUIRE(cbrt(2.0) > M_CBRT_2 - 1e-13); + REQUIRE(cbrt(2.0) < M_CBRT_2 + 1e-13); + REQUIRE(cbrt(3.0) > M_CBRT_3 - 1e-13); + REQUIRE(cbrt(3.0) < M_CBRT_3 + 1e-13); + REQUIRE(cbrt(M_PI) > M_CBRT_PI - 1e-13); + REQUIRE(cbrt(M_PI) < M_CBRT_PI + 1e-13); + REQUIRE(cbrt(M_E) > M_CBRT_E - 1e-13); + REQUIRE(cbrt(M_E) < M_CBRT_E + 1e-13); +} + +TEST("utf8") { + REQUIRE_EQ(utf8_size(1), 1); + REQUIRE_EQ(utf8_size(127), 1); + REQUIRE_EQ(utf8_size(128), 2); + REQUIRE_EQ(utf8_size((1 << 11) - 1), 2); + REQUIRE_EQ(utf8_size((1 << 11)), 3); + REQUIRE_EQ(utf8_size((1 << 16) - 1), 3); + REQUIRE_EQ(utf8_size((1 << 16)), 4); +} + +TEST("time sanity") { + i64 t = current_utc_time_in_milliseconds(); + + REQUIRE(t > 0); + + suspend_thread_for_milliseconds(10); + t = current_utc_time_in_milliseconds() - t; + + REQUIRE(t >= 10); + REQUIRE(t <= 20); + + i64 sec0, nsec0; + current_utc_time_in_sec_and_nsec(&sec0, &nsec0); + + REQUIRE(sec0 > 0); + REQUIRE(nsec0 >= 0); + REQUIRE(nsec0 < 1000000000); + + suspend_thread_for_milliseconds(10); + + i64 sec1, nsec1; + current_utc_time_in_sec_and_nsec(&sec1, &nsec1); + + i64 delta_nsec = 1000000000 * (sec1 - sec0) + (nsec1 - nsec0); + + REQUIRE(delta_nsec >= 10000000); + REQUIRE(delta_nsec <= 20000000); +} + +TEST("blake2b") { + u8 out[4]; + blake2b(out, (u8[4]) { 1, 2, 3, 4, }, NULL, 4, 4, 0); + + REQUIRE_EQ(out[0], 26); + REQUIRE_EQ(out[1], 185); + REQUIRE_EQ(out[2], 56); + REQUIRE_EQ(out[3], 84); + + blake2b(out, (u8[4]) { 1, 2, 3, 4, }, (u8[4]) { 5, 6, 7, 8, }, 4, 4, 4); + + REQUIRE_EQ(out[0], 74); + REQUIRE_EQ(out[1], 233); + REQUIRE_EQ(out[2], 165); + REQUIRE_EQ(out[3], 192); + + // TODO: Add more tests with longer inputs. +} + +TEST("memory allocator") { + void *p = memory_buffer_allocate(16, 4, 0, NULL); + REQUIRE(p != NULL); + + p = memory_buffer_allocate(64, 4, 16, p); + REQUIRE(p != NULL); + + void *q = p; + p = memory_buffer_allocate(8, 4, 64, p); + REQUIRE(p == q); + + p = memory_buffer_allocate(0, 4, 8, p); + REQUIRE(p == NULL); + + // TODO: Add more tests. +} + +TEST("average frame duration") { + for (i64 i = 0; i < 50; ++i) + average_frame_duration_(100); + REQUIRE_EQ(average_frame_duration_(100), 100); } #ifndef EVERY_TEST_SUITE @@ -85,7 +85,7 @@ extern "C" { #endif #ifndef MAX_NUM_TEST_ASSECTIONS -#define MAX_NUM_TEST_ASSECTIONS 0x50 +#define MAX_NUM_TEST_ASSECTIONS 0x60 #endif #ifndef MAX_NUM_BENCHS |