From: Stas Boukarev Date: Mon, 3 Jun 2013 09:52:06 +0000 (+0400) Subject: Fix sleep on ratios, avoiding consing. X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=d06e99b8e2f7901a6774b2d7da0f1ae1bc6dd8d5;p=sbcl.git Fix sleep on ratios, avoiding consing. Enable sleep tests for some platforms. --- diff --git a/src/code/toplevel.lisp b/src/code/toplevel.lisp index 1c00f03..6eb9227 100644 --- a/src/code/toplevel.lisp +++ b/src/code/toplevel.lisp @@ -181,7 +181,7 @@ means to wait indefinitely.") (multiple-value-bind (quot rem) (truncate (numerator seconds) (denominator seconds)) (values quot - (truncate (* rem (/ 1000000000 (denominator seconds))))))) + (* rem (truncate 1000000000 (denominator seconds)))))) (t (multiple-value-bind (sec frac) (truncate seconds) diff --git a/tests/interface.pure.lisp b/tests/interface.pure.lisp index 8a4d2fd..2a5c3d6 100644 --- a/tests/interface.pure.lisp +++ b/tests/interface.pure.lisp @@ -68,12 +68,15 @@ (sleep 2)))) ;;; SLEEP should not cons -(with-test (:name (sleep :non-consing) :fails-on '(or (not :x86-64) :win32)) - (ctu:assert-no-consing (sleep 0.00001))) - -;;; SLEEP should work with large integers as well -- no timers -;;; on win32, so don't test there. -(with-test (:name (sleep pretty-much-forever) :skipped-on :win32) +(with-test (:name (sleep :non-consing) :fails-on :win32) + (ctu:assert-no-consing (sleep 0.00001s0)) + (locally (declare (notinline sleep)) + (ctu:assert-no-consing (sleep 0.00001s0)) + (ctu:assert-no-consing (sleep 0.00001d0)) + (ctu:assert-no-consing (sleep 1/100000000000000)))) + +;;; SLEEP should work with large integers as well +(with-test (:name (sleep pretty-much-forever)) (assert (eq :timeout (handler-case (sb-ext:with-timeout 1