2
;;;; Author: Paul Dietz
3
;;;; Created: Tue Jan 21 06:20:51 2003
4
;;;; Contains: Tests for ARRAY-DISPLACEMENT
8
;;; The tests in make-array.lsp also test array-displacement
10
;;; The standard is contradictory about whether arrays created with
11
;;; :displaced-to NIL should return NIL as their primary value or
12
;;; not. I will assume (as per Kent Pitman's comment on comp.lang.lisp)
13
;;; that an implementation is free to implement all arrays as actually
14
;;; displaced. Therefore, I've omitted all the tests of not-expressly
17
;;; Behavior on expressly displaced arrays
19
(deftest array-displacement.7
20
(let* ((a (make-array '(10)))
21
(b (make-array '(10) :displaced-to a)))
22
(multiple-value-bind* (dt disp)
23
(array-displacement b)
28
(deftest array-displacement.8
29
(let* ((a (make-array '(10)))
30
(b (make-array '(5) :displaced-to a :displaced-index-offset 2)))
31
(multiple-value-bind* (dt disp)
32
(array-displacement b)
37
(deftest array-displacement.9
38
(let* ((a (make-array '(10) :element-type 'base-char))
39
(b (make-array '(5) :displaced-to a :displaced-index-offset 2
40
:element-type 'base-char)))
41
(multiple-value-bind* (dt disp)
42
(array-displacement b)
47
(deftest array-displacement.10
48
(let* ((a (make-array '(10) :element-type 'base-char))
49
(b (make-array '(5) :displaced-to a
50
:element-type 'base-char)))
51
(multiple-value-bind* (dt disp)
52
(array-displacement b)
57
(deftest array-displacement.11
58
(let* ((a (make-array '(10) :element-type 'bit))
59
(b (make-array '(5) :displaced-to a :displaced-index-offset 2
61
(multiple-value-bind* (dt disp)
62
(array-displacement b)
67
(deftest array-displacement.12
68
(let* ((a (make-array '(10) :element-type 'bit))
69
(b (make-array '(5) :displaced-to a
71
(multiple-value-bind* (dt disp)
72
(array-displacement b)
77
(deftest array-displacement.13
78
(let* ((a (make-array '(10) :element-type '(integer 0 255)))
79
(b (make-array '(5) :displaced-to a :displaced-index-offset 2
80
:element-type '(integer 0 255))))
81
(multiple-value-bind* (dt disp)
82
(array-displacement b)
87
(deftest array-displacement.14
88
(let* ((a (make-array '(10) :element-type '(integer 0 255)))
89
(b (make-array '(5) :displaced-to a
90
:element-type '(integer 0 255))))
91
(multiple-value-bind* (dt disp)
92
(array-displacement b)
97
(deftest array-displacement.order.1
98
(let* ((a (make-array '(10)))
99
(b (make-array '(10) :displaced-to a))
101
(multiple-value-bind* (dt disp)
102
(array-displacement (progn (incf i) b))
110
(deftest array-displacement.error.1
111
(signals-error (array-displacement) program-error)
114
(deftest array-displacement.error.2
115
(signals-error (array-displacement #(a b c) nil) program-error)
118
(deftest array-displacement.error.3
119
(loop for e in *mini-universe*
120
unless (or (typep e 'array)
121
(eval `(signals-error (array-displacement ',e)
126
(deftest array-displacement.error.4
127
(signals-error (array-displacement nil) type-error)
130
(deftest array-displacement.error.5
131
(signals-error (let ((x nil)) (array-displacement x))