MODULE test_glib ; (* m2-GTK4 test - GLib main loop, timeout source and monotonic clock. This test needs no display and is safe to run headless. Build/run: see tests/run_tests.sh or `make check`. *) FROM GLib IMPORT g_main_loop_new, g_main_loop_run, g_main_loop_quit, g_timeout_add, GSourceRemove, g_get_monotonic_time, g_usleep; FROM SYSTEM IMPORT ADDRESS; FROM libc IMPORT printf; VAR loop: ADDRESS; fired: BOOLEAN; PROCEDURE OnTimeout (data: ADDRESS) : INTEGER; BEGIN fired := TRUE; g_main_loop_quit(loop); RETURN GSourceRemove END OnTimeout; VAR t0, t1: LONGINT; ok: BOOLEAN; BEGIN fired := FALSE; loop := g_main_loop_new(NIL, 0); IF loop = NIL THEN printf("test_glib: FAIL (g_main_loop_new returned NIL)\n"); HALT(1) END; g_timeout_add(50, OnTimeout, NIL); g_main_loop_run(loop); ok := fired; IF NOT ok THEN printf("test_glib: timeout did not fire\n") END; t0 := g_get_monotonic_time(); g_usleep(1000); t1 := g_get_monotonic_time(); IF t1 <= t0 THEN printf("test_glib: monotonic clock did not advance\n"); ok := FALSE END; IF ok THEN printf("test_glib: PASS\n"); HALT(0) ELSE printf("test_glib: FAIL\n"); HALT(1) END END test_glib.