#include "yasl/loop.h" #include "yasl/timing.h" #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 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_geometry(s).size; assert(sz.x > 0 && sz.y > 0); yasl_surface_schedule_redraw(s); yasl_display_flush(d); yasl_display_dispatch(d, 0); yasl_surface_destroy(s); yasl_display_close(d); } int main(void) { test_scaling(); test_loop(); test_display_lifecycle_standalone(); printf("All YASL basic tests passed.\n"); return 0; }