1.0.3.23: fix sb-posix timeval struct
[sbcl.git] / tests / setf.impure.lisp
index bc4f011..b159173 100644 (file)
   (shiftf (values (car x) (car y)) (values (car y) (car x)))
   (assert (equal (list x y) '((2) (1)))))
 
+;;; SETF of values with multiple-value place forms
+(let ((a t) (b t) (c t) (d t))
+  (let ((list (multiple-value-list
+               (setf (values (values a b) (values c d)) (values 1 2 3 4)))))
+    (assert (equal list '(1 2)))
+    (assert (eql a 1))
+    (assert (eql c 2))
+    (assert (null b))
+    (assert (null d))))
+
+;;; SETF of THE with VALUES.
+(let (x y)
+  (setf (the (values fixnum fixnum) (values x y))
+        (values 1 2))
+  (assert (= x 1))
+  (assert (= y 2)))
+
+;;; SETF of MACRO-FUNCTION must accept a NIL environment
+(let ((fun (constantly 'ok)))
+  (setf (macro-function 'nothing-at-all nil) fun)
+  (assert (eq fun (macro-function 'nothing-at-all nil))))
+
 ;;; success
-(quit :unix-status 104)