Fix make-array transforms.
[sbcl.git] / tests / smoke.impure.lisp
index 87c96de..f0069a7 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; While most of SBCL is derived from the CMU CL system, the test
 ;;;; files (like this one) were written from scratch after the fork
 ;;;; from CMU CL.
-;;;; 
+;;;;
 ;;;; This software is in the public domain and is provided with
 ;;;; absolutely no warranty. See the COPYING and CREDITS files for
 ;;;; more information.
 (cl:in-package :cl-user)
 
 ;;; ROOM should run without signalling an error. (bug 247)
-#+nil (room)
-#+nil (room t)
-#+nil (room nil)
-
-;;; DESCRIBE should run without signalling an error.
-(defstruct to-be-described a b)
-(describe (make-to-be-described))
-(describe 12)
-(describe "a string")
-(describe 'symbolism)
-(describe (find-package :cl))
-(describe '(a list))
-(describe #(a vector))
+(room)
+(room t)
+(room nil)
+
+;;; COPY-SYMBOL should work without signalling an error, even if the
+;;; symbol is unbound.
+(copy-symbol 'foo)
+(copy-symbol 'bar t)
+(defvar *baz* nil)
+(copy-symbol '*baz* t)
+
+;;; SETQ should return its value.
+(assert (typep (setq *baz* 1) 'integer))
+(assert (typep (in-package :cl-user) 'package))
+
+;;; PROFILE should run without obvious breakage
+(progn
+  (defun profiled-fun ()
+    (random 1d0))
+  (profile profiled-fun)
+  (loop repeat 100000 do (profiled-fun))
+  (report))
+
+;;; Defconstant should behave as the documentation specifies,
+;;; including documented condition type.
+(defun oidentity (x) x)
+(defconstant +const+ 1)
+(assert (= (oidentity +const+) 1))
+(let ((error (nth-value 1 (ignore-errors (defconstant +const+ 2)))))
+  (assert (typep error 'sb-ext:defconstant-uneql))
+  (assert (= (sb-ext:defconstant-uneql-old-value error) 1))
+  (assert (= (sb-ext:defconstant-uneql-new-value error) 2))
+  (assert (eql (sb-ext:defconstant-uneql-name error) '+const+)))
+(assert (= (oidentity +const+) 1))
+(handler-bind
+    ((sb-ext:defconstant-uneql
+         (lambda (c) (abort c))))
+  (defconstant +const+ 3))
+(assert (= (oidentity +const+) 1))
+(handler-bind
+    ((sb-ext:defconstant-uneql
+         (lambda (c) (continue c))))
+  (defconstant +const+ 3))
+(assert (= (oidentity +const+) 3))
+
+;;; MULTIPLE-VALUE-BIND and lambda list keywords
+(multiple-value-bind (&rest &optional &key &allow-other-keys)
+    (values 1 2 3)
+  (assert (= &rest 1))
+  (assert (= &optional 2))
+  (assert (= &key 3))
+  (assert (null &allow-other-keys)))
+
+(let ((fn (lambda (&foo &rest &bar) (cons &foo &bar))))
+  (assert (equal (funcall fn 1) '(1)))
+  (assert (equal (funcall fn 1 2 3) '(1 2 3))))
+
+;;; Failure to save a core is an error
+(with-test (:name :save-lisp-and-die-error)
+  (assert (eq :oops
+              (handler-case (save-lisp-and-die "/")
+                (error () :oops)))))
 
 ;;; success
-(quit :unix-status 104)