test_glib.mod 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. MODULE test_glib ;
  2. (*
  3. m2-GTK4 test - GLib main loop, timeout source and monotonic clock.
  4. This test needs no display and is safe to run headless.
  5. Build/run: see tests/run_tests.sh or `make check`.
  6. *)
  7. FROM GLib IMPORT g_main_loop_new, g_main_loop_run, g_main_loop_quit,
  8. g_timeout_add, GSourceRemove, g_get_monotonic_time, g_usleep;
  9. FROM SYSTEM IMPORT ADDRESS;
  10. FROM libc IMPORT printf;
  11. VAR
  12. loop: ADDRESS;
  13. fired: BOOLEAN;
  14. PROCEDURE OnTimeout (data: ADDRESS) : INTEGER;
  15. BEGIN
  16. fired := TRUE;
  17. g_main_loop_quit(loop);
  18. RETURN GSourceRemove
  19. END OnTimeout;
  20. VAR
  21. t0, t1: LONGINT;
  22. ok: BOOLEAN;
  23. BEGIN
  24. fired := FALSE;
  25. loop := g_main_loop_new(NIL, 0);
  26. IF loop = NIL THEN
  27. printf("test_glib: FAIL (g_main_loop_new returned NIL)\n");
  28. HALT(1)
  29. END;
  30. g_timeout_add(50, OnTimeout, NIL);
  31. g_main_loop_run(loop);
  32. ok := fired;
  33. IF NOT ok THEN printf("test_glib: timeout did not fire\n") END;
  34. t0 := g_get_monotonic_time();
  35. g_usleep(1000);
  36. t1 := g_get_monotonic_time();
  37. IF t1 <= t0 THEN
  38. printf("test_glib: monotonic clock did not advance\n");
  39. ok := FALSE
  40. END;
  41. IF ok THEN
  42. printf("test_glib: PASS\n");
  43. HALT(0)
  44. ELSE
  45. printf("test_glib: FAIL\n");
  46. HALT(1)
  47. END
  48. END test_glib.