X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fseq.pure.lisp;h=fe5fe86efc1169ebe01e7136af8b7735d4911b0b;hb=9b79c4c51954ffc46c631e56547ac865860e8855;hp=d6aa49779199448f62f2f549009ac9ce1a9c0a8a;hpb=2c9e9cdf20257c422cd43bd30b89990499bca475;p=sbcl.git diff --git a/tests/seq.pure.lisp b/tests/seq.pure.lisp index d6aa497..fe5fe86 100644 --- a/tests/seq.pure.lisp +++ b/tests/seq.pure.lisp @@ -298,4 +298,86 @@ (assert (eql 2 (funcall (lambda () (declare (optimize speed)) - (search #(1) #(1 1) :start1 1 :start2 2)))))) + (search #(1) #(1 1) :start1 1 :start2 2))))) + (assert (eql 2 + (funcall (lambda () + (declare (optimize speed)) + (search #() #(1 1) :from-end t)))))) + +(with-test (:name :sort-smoke-test) + (flet ((iota (n type &aux (i 0)) + (map-into (make-sequence type n) + (lambda () + (incf i)))) + (shuffle (n type) + (let ((vector (let ((i 0)) + (map-into (make-array n) + (lambda () + (incf i)))))) + (dotimes (i n (coerce vector type)) + (let ((j (+ i (random (- n i))))) + (rotatef (aref vector i) (aref vector j)))))) + (sortedp (x) + (let* ((nonce (list nil)) + (prev nonce)) + (every (lambda (x) + (prog1 (or (eql prev nonce) + (< prev x)) + (setf prev x))) + x)))) + (dolist (type '(simple-vector list)) + (dolist (size '(7 8 9 13 1023 1024 1025 1536)) + (loop for repeat below 5 do + (assert (sortedp + (sort (funcall (case repeat + (0 #'iota) + (1 (lambda (n type) + (reverse (iota n type)))) + (t #'shuffle)) + size type) + #'<)))))))) + +(with-test (:name :stable-sort-smoke-test) + (flet ((iota (n type &aux (i 0)) + (map-into (make-sequence type n) + (lambda () + (cons 0 (incf i))))) + (shuffle (n type) + (let ((max (truncate (expt n 1/4))) + (i 0)) + (map-into (make-sequence type n) + (lambda () + (cons (random max) (incf i)))))) + (sortedp (x) + (let* ((nonce (list nil)) + (prev nonce)) + (every (lambda (x) + (prog1 (or (eql prev nonce) + (< (car prev) (car x)) + (and (= (car prev) (car x)) + (< (cdr prev) (cdr x)))) + (setf prev x))) + x)))) + (dolist (type '(simple-vector list)) + (dolist (size '(0 1 2 3 4 5 6 7 8 + 9 10 11 12 13 14 15 16 17 + 1023 1024 1025 1536)) + (loop for repeat below 5 do + (assert + (sortedp + (stable-sort (funcall (case repeat + (0 #'iota) + (t #'shuffle)) + size type) + #'< :key #'car)))))))) + +(with-test (:name :&more-elt-index-too-large) + (assert (raises-error? (funcall + (compile nil '(lambda (&rest args) + (declare (optimize safety)) + (elt args 0)))) + sb-kernel:index-too-large-error))) + +(with-test (:name :do-sequence-on-literals) + (assert (= (sequence:dosequence (e #(1 2 3)) (return e)) + 1)))