X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Farray.pure.lisp;h=ba823a03d141626e12e01aa551509b4062652ef2;hb=ae026fe85fef157ff42d6655e5f5e4eef74709f1;hp=0994d493f45eb3562ae03afd8fc0e6aaacb1e849;hpb=4191783c20fc6f86afe4b3fe73e79b075a08cc43;p=sbcl.git diff --git a/tests/array.pure.lisp b/tests/array.pure.lisp index 0994d49..ba823a0 100644 --- a/tests/array.pure.lisp +++ b/tests/array.pure.lisp @@ -163,16 +163,19 @@ ;;; 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))) + (assert (eq x (adjust-array x '(5)))) + (assert (eq :error (handler-case + (char y 0) + (sb-int:invalid-array-error (e) + (assert (eq y (type-error-datum e))) + (assert (equal `(vector character 10) + (type-error-expected-type e))) + :error)))))) ;;; MISC.527: bit-vector bitwise operations used LENGTH to get a size ;;; of a vector @@ -237,12 +240,61 @@ (assert (eql 12 (type-error-datum e))) (assert (equal '(integer 0 3) (type-error-expected-type e))))))) -(with-test (:name simple-array-vector) +(with-test (:name array-storage-vector) (let ((vec (vector 1 2 3))) - (assert (eq vec (sb-ext:simple-array-vector vec))) + (assert (eq vec (sb-ext:array-storage-vector vec))) (assert (equalp (vector 1 2 3 4) - (sb-ext:simple-array-vector + (sb-ext:array-storage-vector (make-array '(2 2) :initial-contents '((1 2) (3 4)))))) (assert (eq 'fixnum (array-element-type - (sb-ext:simple-array-vector (make-array '(3 4 5) - :element-type 'fixnum))))))) + (sb-ext:array-storage-vector (make-array '(3 4 5) + :element-type 'fixnum))))) + (assert (not (array-has-fill-pointer-p + (sb-ext::array-storage-vector + (make-array 5 :fill-pointer 4))))))) + +(with-test (:name invalid-array-index-error) + (let ((array (make-array '(3 3 3)))) + (assert + (eq :right + (handler-case + (eval `(aref ,array 0 1 3)) + (sb-int:invalid-array-index-error (e) + (when (and (eq array (sb-kernel::invalid-array-index-error-array e)) + (= 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)))))) + +(with-test (:name :odd-keys-for-make-array) + (assert (eq :good + (handler-case + (compile nil '(lambda (m) (make-array m 1))) + (simple-warning () :good))))) + + +(with-test (:name :bug-1096359) + (let ((a (make-array 1 :initial-element 5))) + (assert (equalp (adjust-array a 2 :initial-element 10) + #(5 10))))) + +(with-test (:name (make-array-transform-unknown-type :bug-1156095)) + (assert + (handler-case + (compile nil `(lambda () (make-array '(1 2) + :element-type ',(gensym)))) + (style-warning () + t) + (:no-error (&rest args) + nil))))