- (dolist (seq-type '(list
- (simple-array t 1)
- (vector t)
- (simple-array character 1)
- (vector character)
- (simple-array (signed-byte 4) 1)
- (vector (signed-byte 4))))
- (flet ((entirely (eltype)
- (every (lambda (el) (typep el eltype)) base-seq)))
+ (labels
+ ((entirely (eltype)
+ (every (lambda (el) (typep el eltype)) base-seq))
+ (make-sequence-for-type (type)
+ (etypecase type
+ ((member list list-backed-sequence)
+ (coerce base-seq type))
+ ((cons (eql simple-array) (cons * (cons (eql 1) null)))
+ (destructuring-bind (eltype one) (rest type)
+ (when (entirely eltype)
+ (coerce base-seq type))))
+ ((cons (eql vector))
+ (destructuring-bind (eltype) (rest type)
+ (when (entirely eltype)
+ (let ((initial-element
+ (cond ((subtypep eltype 'character)
+ #\!)
+ ((subtypep eltype 'number)
+ 0)
+ (t #'error))))
+ (replace (make-array
+ (+ (length base-seq)
+ (random 3))
+ :element-type eltype
+ :fill-pointer
+ (length base-seq)
+ :initial-element
+ initial-element)
+ base-seq))))))))
+ (dolist (seq-type '(list
+ (simple-array t 1)
+ (vector t)
+ (simple-array character 1)
+ (vector character)
+ (simple-array (signed-byte 4) 1)
+ (vector (signed-byte 4))
+ list-backed-sequence))