#include "yasl/yasl.h" #include #include #include #include static void test_scaling(void) { assert(yasl_scale_to_device(10.0, 120) == 10); assert(yasl_scale_to_device(10.0, 240) == 20); assert(yasl_scale_to_logical(20, 240) == 10); } static void test_timing_clock(void) { struct yasl_frame_clock clock = { .refresh_ns = 16666666.0 }; yasl_clock_presented(&clock, 1000000000, true); assert(clock.last_present_ns == 1000000000); uint64_t next = yasl_clock_next_present_ns(&clock); assert(next > 1000000000); yasl_clock_note_resize(&clock, 500000); struct yasl_resize_stats stats; yasl_clock_resize_stats(&clock, &stats); assert(stats.count == 1); assert(stats.max_us == 500.0); } static int dummy_cb(int fd, short revents, void *ud) { (void)fd; (void)revents; (void)ud; return 0; } static void test_loop(void) { struct yasl_loop *loop = yasl_loop_create(); assert(loop != NULL); int p[2]; assert(pipe(p) == 0); int watch = yasl_loop_add_fd(loop, p[0], POLLIN, dummy_cb, NULL); assert(watch > 0); assert(yasl_loop_set_fd_events(loop, watch, POLLIN | POLLOUT) == 0); yasl_loop_kick(loop); int n = yasl_loop_step(loop, 10); assert(n >= 1); assert(yasl_loop_del_fd(loop, watch) == 0); close(p[0]); close(p[1]); yasl_loop_destroy(loop); } static void test_display_lifecycle_standalone(void) { struct yasl_display_spec spec = { .app_id = "org.yasl.test" }; struct yasl_display *d = yasl_display_open(NULL, &spec); if (!d) return; /* Headless CI without Wayland */ struct yasl_surface_spec sspec = { .title = "Test Window", .size = { .x = 320, .y = 240 }, }; struct yasl_surface *s = yasl_surface_create_toplevel(d, &sspec); assert(s != NULL); assert(yasl_surface_display(s) == d); struct yasl_vector2i sz = yasl_surface_size(s); assert(sz.x > 0 && sz.y > 0); yasl_surface_schedule_redraw(s); yasl_display_flush(d); yasl_display_dispatch_timeout(d, 0); yasl_surface_destroy(s); yasl_display_close(d); } int main(void) { test_scaling(); test_timing_clock(); test_loop(); test_display_lifecycle_standalone(); printf("All YASL basic tests passed.\n"); return 0; }