(define-library (chibi system-test)
  (export run-tests)
  (import (chibi) (chibi system) (only (chibi test) test-begin test test-end))
  (begin
    (define (run-tests)
      (test-begin "system")

      (test #t (user? (user-information (current-user-id))))
      (test #f (user? #f))
      (test #f (user? (list #f)))
      (test #t (string? (user-name (user-information (current-user-id)))))
      (test #t (string? (user-password (user-information (current-user-id)))))
      (test #t (integer? (user-id (user-information (current-user-id)))))
      (test #t (integer? (user-group-id (user-information (current-user-id)))))
      (test #t (string? (user-gecos (user-information (current-user-id)))))
      (test #t (string? (user-home (user-information (current-user-id)))))
      (test #t (string? (user-shell (user-information (current-user-id)))))

      (test (current-user-id) (user-id (user-information (current-user-id))))
      (test (current-group-id) (user-group-id (user-information (current-user-id))))

      (test (user-id (user-information (current-user-id)))
          (user-id (user-information (user-name (user-information (current-user-id))))))

      (test #t (integer? (current-session-id)))

      ;; stress test user-name
      (test (user-name (user-information (current-user-id)))
          (user-name (user-information (current-user-id))))
      (let ((u (user-information (current-user-id))))
        (test (user-name u) (user-name (user-information (current-user-id)))))
      (let ((un (user-name (user-information (current-user-id)))))
        (test un (user-name (user-information (current-user-id)))))

      (test-end))))