1.0.28.19: faster ARRAY-DIMENSION for non-vectors
[sbcl.git] / tests / array.pure.lisp
index 7f5c11f..5141d41 100644 (file)
 ;;; BUG 315: "no bounds check for access to displaced array"
 ;;;  reported by Bruno Haible sbcl-devel "various SBCL bugs" from CLISP
 ;;;  test suite.
-(multiple-value-bind (val err)
-    (ignore-errors
-      (locally (declare (optimize (safety 3) (speed 0)))
-        (let* ((x (make-array 10 :fill-pointer 4 :element-type 'character
-                              :initial-element #\space :adjustable t))
-               (y (make-array 10 :fill-pointer 4 :element-type 'character
-                              :displaced-to x)))
-          (adjust-array x '(5))
-          (char y 5))))
-  (assert (and (not val) (typep err 'sb-kernel:displaced-to-array-too-small-error))))
+(locally (declare (optimize (safety 3) (speed 0)))
+      (let* ((x (make-array 10 :fill-pointer 4 :element-type 'character
+                            :initial-element #\space :adjustable t))
+             (y (make-array 10 :fill-pointer 4 :element-type 'character
+                            :displaced-to x)))
+        (handler-case
+            (adjust-array x '(5))
+          (error (e)
+            (assert (typep e 'sb-int:simple-reference-error))
+            (assert (equal '((:ansi-cl function adjust-array))
+                           (sb-int:reference-condition-references e)))))))
 
 ;;; MISC.527: bit-vector bitwise operations used LENGTH to get a size
 ;;; of a vector
                         (= 3 (type-error-datum e))
                         (equal '(integer 0 (3)) (type-error-expected-type e)))
                :right)))))))
+
+(with-test (:name :out-of-bounds-error-details)
+  (assert (eq :good
+              (handler-case
+                  (flet ((test (array i)
+                           (aref array i)))
+                    (test (eval '(vector 0 1 2 3)) 6))
+                (sb-int:invalid-array-index-error (e)
+                  (when (and (equal '(integer 0 (4))
+                                    (type-error-expected-type e))
+                             (eql 6 (type-error-datum e)))
+                    :good))))))
+