summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitya Selivanov <automainint@guattari.tech>2025-04-16 19:26:41 +0200
committerMitya Selivanov <automainint@guattari.tech>2025-04-16 19:26:41 +0200
commite748e39c669506cfcb2eb8f2549dfd201d6a6b53 (patch)
tree08f2b0a470d722991c3b67ef16117787826ef2de
parent2e169096003edab21b6720a25342529b1c7e12f0 (diff)
downloadreduced_system_layer-e748e39c669506cfcb2eb8f2549dfd201d6a6b53.zip
Add tests
-rwxr-xr-xreduced_system_layer.c291
-rw-r--r--test.c2
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
diff --git a/test.c b/test.c
index 6d9c4bb..0481761 100644
--- a/test.c
+++ b/test.c
@@ -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