;;;; critical-region-test.scm  -*- Scheme -*-
;;;; Kon Lovett, Dec '18

(import test)

(test-begin "Critical Region")

;;;

(import critical-region)

(test-group "Exchanger"
  (let ((xr (make-exchanger #f)))
    (test-assert (procedure? xr))
    (test #f (xr #t))
    (test #t (xr 4)) )
)

#;
(test-group "Critical Region"
  (test-assert "disabled" (critical-region (not (interrupts-enabled?))))
  (test-assert "enabled" (interrupts-enabled?))
  (test-assert (not (receive (f v) (critical-region* (abort 'foo)) f)))
  (test-assert "enabled" (interrupts-enabled?))
  (test-assert "apply disabled"  (critical-region-apply (lambda (_) (not (interrupts-enabled?))) #f))
  (test 'expected (critical-region-apply (lambda (x) x) 'expected))
  (test-assert (not (receive (f v) (critical-region-call* (lambda () (abort 'foo))) f)))
)

;;;

(test-end "Critical Region")

(test-exit)