X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Fdeadline.impure.lisp;h=e4b077ed7e18e955b1713dbd611b01eb3136e5f7;hb=838316d0ad9affb2a4284ece65798aed6313d7e7;hp=10bae09a5fc8ff3c57b8b4e15501da073b6a0ee2;hpb=2b0c46508938b606e70cd6f2bb51506d44e45262;p=sbcl.git diff --git a/tests/deadline.impure.lisp b/tests/deadline.impure.lisp index 10bae09..e4b077e 100644 --- a/tests/deadline.impure.lisp +++ b/tests/deadline.impure.lisp @@ -1,3 +1,7 @@ +(in-package :cl-user) + +(use-package :test-util) + (defmacro assert-timeout (form) (let ((ok (gensym "OK"))) `(let ((,ok ',ok)) @@ -7,60 +11,86 @@ ,ok))) (error "No timeout from form:~% ~S" ',form))))) +(defun run-sleep (seconds) + (sb-ext:run-program "sleep" (list (format nil "~D" seconds)) + :search t :wait t)) -(assert-timeout - (sb-sys:with-deadline (:seconds 1) - (run-program "sleep" '("3") :search t :wait t))) +(with-test (:name (:deadline :run-program :trivial)) + (assert-timeout (sb-sys:with-deadline (:seconds 1) + (run-sleep 3)))) -(let ((n 0) - (final nil)) - (handler-case - (handler-bind ((sb-sys:deadline-timeout (lambda (c) - (when (< n 2) - (incf n) - (sb-sys:defer-deadline 0.1 c))))) - (sb-sys:with-deadline (:seconds 1) - (run-program "sleep" '("2") :search t :wait t))) - (sb-sys:deadline-timeout (c) - (setf final c))) - (assert (= n 2)) - (assert final)) +(with-test (:name (:deadline :defer-deadline-1)) + (let ((n 0) + (final nil)) + (handler-case + (handler-bind ((sb-sys:deadline-timeout + #'(lambda (c) + (when (< n 2) + (incf n) + (sb-sys:defer-deadline 0.1 c))))) + (sb-sys:with-deadline (:seconds 1) + (run-sleep 2))) + (sb-sys:deadline-timeout (c) + (setf final c))) + (assert (= n 2)) + (assert final))) -(let ((n 0) - (final nil)) - (handler-case - (handler-bind ((sb-sys:deadline-timeout (lambda (c) - (incf n) - (sb-sys:defer-deadline 0.1 c)))) - (sb-sys:with-deadline (:seconds 1) - (run-program "sleep" '("2") :search t :wait t))) - (sb-sys:deadline-timeout (c) - (setf final c))) - (assert (plusp n)) - (assert (not final))) +(with-test (:name (:deadline :defer-deadline-2)) + (let ((n 0) + (final nil)) + (handler-case + (handler-bind ((sb-sys:deadline-timeout + #'(lambda (c) + (incf n) + (sb-sys:defer-deadline 0.1 c)))) + (sb-sys:with-deadline (:seconds 1) + (run-sleep 2))) + (sb-sys:deadline-timeout (c) + (setf final c))) + (assert (plusp n)) + (assert (not final)))) + +(with-test (:name (:deadline :cancel-deadline)) + (let ((n 0) + (final nil)) + (handler-case + (handler-bind ((sb-sys:deadline-timeout + #'(lambda (c) + (incf n) + (sb-sys:cancel-deadline c)))) + (sb-sys:with-deadline (:seconds 1) + (run-sleep 2))) + (sb-sys:deadline-timeout (c) + (setf final c))) + (assert (= n 1)) + (assert (not final)))) #+(and sb-thread (not sb-lutex)) (progn - (assert-timeout - (let ((lock (sb-thread:make-mutex)) - (waitp t)) - (sb-thread:make-thread (lambda () - (sb-thread:get-mutex lock) - (setf waitp nil) - (sleep 5))) - (loop while waitp do (sleep 0.01)) - (sb-impl::with-deadline (:seconds 1) - (sb-thread:get-mutex lock)))) - (assert-timeout - (let ((sem (sb-thread::make-semaphore :count 0))) - (sb-impl::with-deadline (:seconds 1) - (sb-thread::wait-on-semaphore sem)))) + (with-test (:name (:deadline :get-mutex)) + (assert-timeout + (let ((lock (sb-thread:make-mutex)) + (waitp t)) + (sb-thread:make-thread (lambda () + (sb-thread:get-mutex lock) + (setf waitp nil) + (sleep 5))) + (loop while waitp do (sleep 0.01)) + (sb-sys:with-deadline (:seconds 1) + (sb-thread:get-mutex lock))))) + + (with-test (:name (:deadline :wait-on-semaphore)) + (assert-timeout + (let ((sem (sb-thread::make-semaphore :count 0))) + (sb-sys:with-deadline (:seconds 1) + (sb-thread::wait-on-semaphore sem))))) - (assert-timeout - (sb-impl::with-deadline (:seconds 1) - (sb-thread:join-thread - (sb-thread:make-thread (lambda () (loop (sleep 1))))))) + (with-test (:name (:deadline :join-thread)) + (assert-timeout + (sb-sys:with-deadline (:seconds 1) + (sb-thread:join-thread + (sb-thread:make-thread (lambda () (loop (sleep 1)))))))) (with-test (:name (:deadline :futex-wait-eintr)) (let ((lock (sb-thread:make-mutex)) @@ -74,7 +104,7 @@ (lambda () (let ((start (get-internal-real-time))) (handler-case - (sb-impl::with-deadline (:seconds 1) + (sb-sys:with-deadline (:seconds 1) (sb-thread:get-mutex lock)) (sb-sys:deadline-timeout (x) (declare (ignore x)) @@ -86,4 +116,4 @@ (sb-thread:interrupt-thread thread (lambda () 42)) (let ((seconds-passed (sb-thread:join-thread thread))) (format t "Deadline in ~S~%" seconds-passed) - (assert (< seconds-passed 1.2))))))) + (assert (< seconds-passed 1.2))))))) \ No newline at end of file