X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Finterface.pure.lisp;h=74ce1e028a888e15664cd24e2cf8b878ddc4c84c;hb=b111015a7111501231c7b61990c61c046392796b;hp=2a27b35b50b7b8e34cb371e80ab2b0164aaac637;hpb=ed3295bc583cd14104130441e9ff1ad40fa5e484;p=sbcl.git diff --git a/tests/interface.pure.lisp b/tests/interface.pure.lisp index 2a27b35..74ce1e0 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 @@ -57,15 +61,31 @@ (assert (not (special-operator-p 'declare))) ;;; WITH-TIMEOUT should accept more than one form in its body. -(handler-bind ((sb-ext:timeout #'continue)) - (sb-ext:with-timeout 3 - (sleep 2) - (sleep 2))) +(with-test (:name :with-timeout-forms) + (handler-bind ((sb-ext:timeout #'continue)) + (sb-ext:with-timeout 3 + (sleep 2) + (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) + (assert (eq :timeout + (handler-case + (sb-ext:with-timeout 1 + (sleep (ash 1 (* 2 sb-vm:n-word-bits)))) + (sb-ext:timeout () + :timeout))))) ;;; DOCUMENTATION should return nil, not signal slot-unbound (documentation 'fixnum 'type) (documentation 'class 'type) (documentation (find-class 'class) 'type) +(documentation 'foo 'structure) ;;; DECODE-UNIVERSAL-TIME should accept second-resolution time-zones. (macrolet ((test (ut time-zone list) @@ -103,4 +123,15 @@ ;;; comprehensive test. (loop repeat 2 do (compile nil '(lambda (x) x)) - do (sb-ext:gc :full t)) \ No newline at end of file + do (sb-ext:gc :full t)) + +;;; On x86-64, the instruction definitions for CMP*[PS][SD] were broken +;;; so that the disassembler threw an error when they were used with +;;; one operand in memory. +(with-test (:name :bug-814702) + (disassemble (lambda (x) + (= #C(2.0f0 3.0f0) + (the (complex single-float) x)))) + (disassemble (lambda (x y) + (= (the (complex single-float) x) + (the (complex single-float) y)))))