(assert-type-error (concatenate '(string 6) "foo" " " "bar"))
(assert (string= (concatenate '(string 6) "foo" #(#\b #\a #\r)) "foobar"))
(assert-type-error (concatenate '(string 7) "foo" #(#\b #\a #\r))))
- ;; SIMPLE-ARRAY isn't allowed as a vector type specifier
+ ;; Non-VECTOR ARRAY types aren't allowed as vector type specifiers.
(locally
- (declare (optimize safety))
+ (declare (optimize safety))
(assert-type-error (concatenate 'simple-array "foo" "bar"))
(assert-type-error (map 'simple-array #'identity '(1 2 3)))
+ (assert (equalp #(11 13)
+ (map '(simple-array fixnum (*)) #'+ '(1 2 3) '(10 11))))
(assert-type-error (coerce '(1 2 3) 'simple-array))
+ (assert-type-error (merge 'simple-array '(1 3) '(2 4) '<))
+ (assert (equalp #(3 2 1) (coerce '(3 2 1) '(vector fixnum))))
+ (assert-type-error (map 'array #'identity '(1 2 3)))
+ (assert-type-error (map '(array fixnum) #'identity '(1 2 3)))
+ (assert (equalp #(1 2 3) (coerce '(1 2 3) '(vector fixnum))))
;; but COERCE has an exemption clause:
- (assert (string= "foo" (coerce "foo" 'simple-array)))))
+ (assert (string= "foo" (coerce "foo" 'simple-array)))
+ ;; ... though not in all cases.
+ (assert-type-error (coerce '(#\f #\o #\o) 'simple-array))))
+
+;;; As pointed out by Raymond Toy on #lisp IRC, MERGE had some issues
+;;; with user-defined types until sbcl-0.7.8.11
+(deftype list-typeoid () 'list)
+(assert (equal '(1 2 3 4) (merge 'list-typeoid '(1 3) '(2 4) '<)))
+;;; and also with types that weren't precicely LIST
+(assert (equal '(1 2 3 4) (merge 'cons '(1 3) '(2 4) '<)))
\f
;;; success
(quit :unix-status 104)