2
;;;; Author: Paul Dietz
3
;;;; Created: Wed Aug 21 00:11:24 2002
4
;;;; Contains: Tests for SORT
9
(let ((a (list 1 4 2 5 3)))
14
(let ((a (list 1 4 2 5 3)))
15
(sort a #'< :key #'-))
19
(let ((a (list 1 4 2 5 3)))
20
(sort a #'(lambda (x y) nil))
25
;;; Confirm that sort only permutes the sequence, even when given
26
;;; a comparison function that does not define a total order.
32
(let ((a (list 1 2 3 4 5 6 7 8 9 0))
33
(cmp (make-array '(10 10))))
34
(loop for i from 0 to 9 do
35
(loop for j from 0 to 9 do
36
(setf (aref cmp i j) (zerop (logand (random 1024) 512)))))
37
(setq a (sort a #'(lambda (i j) (aref cmp i j))))
38
(and (eqlt (length a) 10)
39
(equalt (sort a #'<) '(0 1 2 3 4 5 6 7 8 9)))))
42
(deftest sort-vector.1
43
(let ((a (copy-seq #(1 4 2 5 3))))
47
(deftest sort-vector.2
48
(let ((a (copy-seq #(1 4 2 5 3))))
49
(sort a #'< :key #'-))
52
(deftest sort-vector.3
53
(let ((a (copy-seq #(1 4 2 5 3))))
54
(sort a #'(lambda (x y) nil))
58
(deftest sort-vector.4
59
(let ((a (make-array 10 :initial-contents '(10 40 20 50 30 15 45 25 55 35)
64
(deftest sort-vector.5
68
(let ((a (vector 1 2 3 4 5 6 7 8 9 0))
69
(cmp (make-array '(10 10))))
70
(loop for i from 0 to 9 do
71
(loop for j from 0 to 9 do
72
(setf (aref cmp i j) (zerop (logand (random 1024) 512)))))
73
(setq a (sort a #'(lambda (i j) (aref cmp i j))))
74
(and (eqlt (length a) 10)
75
(equalpt (sort a #'<) #(0 1 2 3 4 5 6 7 8 9)))))
78
(deftest sort-bit-vector.1
79
(let ((a (copy-seq #*10011101)))
83
(deftest sort-bit-vector.2
84
(let ((a (copy-seq #*10011101)))
85
(values (sort a #'< :key #'-) a))
89
(deftest sort-bit-vector.3
90
(let ((a (make-array 10 :initial-contents '(1 0 0 1 1 1 1 0 1 1)
96
(deftest sort-string.1
97
(let ((a (copy-seq "10011101")))
98
(values (sort a #'char<) a))
102
(deftest sort-string.2
103
(let ((a (copy-seq "10011101")))
104
(values (sort a #'char< :key #'(lambda (c) (if (eql c #\0) #\1 #\0))) a))
108
(deftest sort-string.3
109
(let ((a (make-array 10 :initial-contents "1001111011"
110
:element-type 'character
115
;;; Order of evaluation tests
117
(deftest sort.order.1
120
(sort (progn (setf x (incf i)) (list 1 7 3 2))
121
(progn (setf y (incf i)) #'<))
125
(deftest sort.order.2
128
(sort (progn (setf x (incf i)) (list 1 7 3 2))
129
(progn (setf y (incf i)) #'<)
130
:key (progn (setf z (incf i)) #'-))
137
(deftest sort.error.1
138
(signals-error (sort) program-error)
141
(deftest sort.error.2
142
(signals-error (sort nil) program-error)
145
(deftest sort.error.3
146
(signals-error (sort nil #'< :key) program-error)
149
(deftest sort.error.4
150
(signals-error (sort nil #'< 'bad t) program-error)
153
(deftest sort.error.5
154
(signals-error (sort nil #'< 'bad t :allow-other-keys nil) program-error)
157
(deftest sort.error.6
158
(signals-error (sort nil #'< 1 2) program-error)
161
(deftest sort.error.7
162
(signals-error (sort (list 1 2 3 4) #'identity) program-error)
165
(deftest sort.error.8
166
(signals-error (sort (list 1 2 3 4) #'< :key #'cons) program-error)
169
(deftest sort.error.9
170
(signals-error (sort (list 1 2 3 4) #'< :key #'car) type-error)
173
(deftest sort.error.10
174
(signals-error (sort (list 1 2 3 4) #'elt) type-error)