2
;;;; Author: Paul Dietz
3
;;;; Created: Sat Oct 12 19:41:14 2002
4
;;;; Contains: Tests on SUBSEQ
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11
(deftest subseq-list.1
12
(subseq '(a b c d e) 0 0)
15
(deftest subseq-list.2
19
(deftest subseq-list.3
24
(deftest subseq-list.4
28
(deftest subseq-list.5
32
(deftest subseq-list.6 ;; check that no structure is shared
36
(deftest subseq-list.7
37
(let ((x (loop for i from 0 to 9 collect i)))
38
(setf (subseq x 0 3) (list 'a 'b 'c))
40
(a b c 3 4 5 6 7 8 9))
42
(deftest subseq-list.8
43
(let* ((x '(a b c d e))
45
(setf (subseq y 0) '(f g h))
47
((a b c d e) (f g h d e)))
49
(deftest subseq-list.9
50
(let* ((x '(a b c d e))
52
(setf (subseq y 1 3) '(1 2 3 4 5))
54
((a b c d e) (a 1 2 d e)))
56
(deftest subseq-list.10
57
(let* ((x '(a b c d e))
59
(setf (subseq y 5) '(1 2 3 4 5))
61
((a b c d e) (a b c d e)))
63
(deftest subseq-list.11
64
(let* ((x '(a b c d e))
66
(setf (subseq y 2 5) '(1))
68
((a b c d e) (a b 1 d e)))
70
(deftest subseq-list.12
71
(let* ((x '(a b c d e))
73
(setf (subseq y 0 0) '(1 2))
75
((a b c d e) (a b c d e)))
80
(deftest subseq-vector.1
81
(subseq-vector.1-body)
85
(deftest subseq-vector.2
86
(subseq-vector.2-body)
90
(deftest subseq-vector.3
91
(subseq-vector.3-body)
94
(deftest subseq-vector.4
95
(subseq-vector.4-body)
98
(deftest subseq-vector.5
99
(subseq-vector.5-body)
102
(deftest subseq-vector.6
103
(subseq-vector.6-body)
106
(deftest subseq-vector.7
107
(let* ((x (make-array '(10) :initial-contents '(a b c d e f g h i j)))
109
(equal-array y (make-array '(6) :initial-contents '(c d e f g h))))
112
(deftest subseq-vector.8
113
(let* ((x (make-array '(200) :initial-element 107
114
:element-type 'fixnum))
115
(y (subseq x 17 95)))
116
(and (eqlt (length y) (- 95 17))
118
(make-array (list (- 95 17))
120
:element-type 'fixnum))))
123
(deftest subseq-vector.9
124
(let* ((x (make-array '(1000) :initial-element 17.6e-1
125
:element-type 'single-float))
128
(y (subseq x lo hi)))
129
(and (eqlt (length y) (- hi lo))
131
(make-array (list (- hi lo))
132
:initial-element 17.6e-1
133
:element-type 'single-float))))
136
(deftest subseq-vector.10
137
(let* ((x (make-array '(2000) :initial-element 3.1415927d4
138
:element-type 'double-float))
141
(y (subseq x lo hi)))
142
(and (eqlt (length y) (- hi lo))
144
(make-array (list (- hi lo))
145
:initial-element 3.1415927d4
146
:element-type 'double-float))))
149
;;; subseq on strings
151
(deftest subseq-string.1
152
(subseq-string.1-body)
155
(deftest subseq-string.2
156
(subseq-string.2-body)
159
(deftest subseq-string.3
160
(subseq-string.3-body)
163
;;; Tests on bit vectors
165
(deftest subseq-bit-vector.1
166
(subseq-bit-vector.1-body)
169
(deftest subseq-bit-vector.2
170
(subseq-bit-vector.2-body)
173
(deftest subseq-bit-vector.3
174
(subseq-bit-vector.3-body)
177
;;; Order of evaluation
179
(deftest subseq.order.1
183
(progn (setf a (incf i)) "abcdefgh")
184
(progn (setf b (incf i)) 1)
185
(progn (setf c (incf i)) 4))
189
(deftest subseq.order.2
193
(progn (setf a (incf i)) "abcdefgh")
194
(progn (setf b (incf i)) 1))
198
(deftest subseq.order.3
200
(s (copy-seq "abcdefgh")))
203
(progn (setf a (incf i)) s)
204
(progn (setf b (incf i)) 1)
205
(progn (setf c (incf i)) 4))
206
(progn (setf d (incf i)) "xyz"))
208
"xyz" "axyzefgh" 4 1 2 3 4)
210
(deftest subseq.order.4
212
(s (copy-seq "abcd")))
215
(progn (setf a (incf i)) s)
216
(progn (setf b (incf i)) 1))
217
(progn (setf c (incf i)) "xyz"))
219
"xyz" "axyz" 3 1 2 3)
223
(deftest subseq.error.1
224
(signals-error (subseq) program-error)
227
(deftest subseq.error.2
228
(signals-error (subseq nil) program-error)
231
(deftest subseq.error.3
232
(signals-error (subseq nil 0 0 0) program-error)