X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Finterface.pure.lisp;h=7e43f9746104a2658337dc9e0db2010d3e9ce986;hb=1cba0af01f5107ab384d0d8b94b1f6330b3d0ef4;hp=411c8b59abbea84f7cd6e82bdb5fb63d74bf0f66;hpb=95009657265e2af674bdfa9ce7dc75d819976e5b;p=sbcl.git diff --git a/tests/interface.pure.lisp b/tests/interface.pure.lisp index 411c8b5..7e43f97 100644 --- a/tests/interface.pure.lisp +++ b/tests/interface.pure.lisp @@ -12,6 +12,10 @@ ;;;; more information. (in-package :cl-user) + +(load "test-util.lisp") +(load "compiler-test-util.lisp") +(use-package :test-util) ;;;; properties of symbols, e.g. presence of doc strings for public symbols @@ -63,9 +67,30 @@ (sleep 2) (sleep 2)))) -;;; 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) +;;; SLEEP should not cons except on 32-bit platforms when +;;; (> (mod seconds 1) (* most-positive-fixnum 1e-9)) +(with-test (:name (sleep :non-consing) :fails-on :win32) + (handler-case (sb-ext:with-timeout 5 + (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/100000003)))) + (timeout ()))) + +;;; Changes to make SLEEP cons less led to SLEEP +;;; not sleeping at all on 32-bit platforms when +;;; (> (mod seconds 1) (* most-positive-fixnum 1e-9)). +(with-test (:name :bug-1194673) + (assert (eq :timeout + (handler-case + (with-timeout 0.01 + (sleep 0.6)) + (timeout () + :timeout))))) + +;;; 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 @@ -127,3 +152,19 @@ (disassemble (lambda (x y) (= (the (complex single-float) x) (the (complex single-float) y))))) + +;;; Check that SLEEP called with ratios (with no common factors with +;;; 1000000000, and smaller than 1/1000000000) works more or less as +;;; expected. +(with-test (:name :sleep-ratios) + (let ((fun0a (compile nil '(lambda () (sleep 1/7)))) + (fun0b (compile nil '(lambda () (sleep 1/100000000000000000000000000)))) + (fun1 (compile nil '(lambda (x) (sleep x)))) + (start-time (get-universal-time))) + (sleep 1/7) + (sleep 1/100000000000000000000000000) + (funcall fun0a) + (funcall fun0b) + (funcall fun1 1/7) + (funcall fun1 1/100000000000000000000000000) + (assert (< (- (get-universal-time) start-time) 2))))