;;;; absolutely no warranty. See the COPYING and CREDITS files for
;;;; more information.
+(load "test-util.lisp")
(load "assertoid.lisp")
(defpackage :seq-test
- (:use :cl :assertoid))
+ (:use :cl :assertoid :test-util))
(in-package :seq-test)
(svref x 0))
(assert (raises-error? (svrefalike #*0) type-error))
\f
-;;; checks for uniform bounding index handling under SAFETY 3 code.
+;;; checks for uniform bounding index handling.
+;;;
+;;; This used to be SAFETY 3 only, but bypassing these checks with
+;;; above-zero speed when SPEED > SAFETY is not The SBCL Way.
;;;
;;; KLUDGE: not all in one big form because that causes SBCL to spend
;;; an absolute age trying to compile it.
(defmacro sequence-bounding-indices-test (&body body)
`(progn
- (locally
+ (locally
;; See Issues 332 [and 333(!)] in the CLHS
- (declare (optimize (safety 3)))
+ (declare (optimize (speed 3) (safety 1)))
(let ((string (make-array 10
:fill-pointer 5
:initial-element #\a
,@(cdr body))))
(locally
;; See Issues 332 [and 333(!)] in the CLHS
- (declare (optimize (safety 3)))
+ (declare (optimize (speed 3) (safety 1)))
(let ((string (make-array 10
:fill-pointer 5
:initial-element #\a
standard bashed)
;; fill vectors
;; a) the standard slow way
- (fill standard c :start offset :end (+ offset n))
+ (locally (declare (notinline fill))
+ (fill standard c :start offset :end (+ offset n)))
;; b) the blazingly fast way
(let ((value (loop for i from 0 by bitsize
until (= i sb-vm:n-word-bits)
(delete-duplicates (vector #\a #\b #\c #\a)
:test-not (lambda (a b) (not (char-equal a b))))
+
+;;; FILL on lists
+(let ((l (list 1 2 3)))
+ (assert (eq l (fill l 0 :start 1 :end 2)))
+ (assert (equal l '(1 0 3)))
+ (assert (eq l (fill l 'x :start 2 :end 3)))
+ (assert (equal l '(1 0 x)))
+ (assert (eq l (fill l 'y :start 1)))
+ (assert (equal l '(1 y y)))
+ (assert (eq l (fill l 'z :end 2)))
+ (assert (equal l '(z z y)))
+ (assert (eq l (fill l 1)))
+ (assert (equal l '(1 1 1)))
+ (assert (raises-error? (fill l 0 :start 4)))
+ (assert (raises-error? (fill l 0 :end 4)))
+ (assert (raises-error? (fill l 0 :start 2 :end 1))))
+
+;;; Both :TEST and :TEST-NOT provided
+(with-test (:name :test-and-test-not-to-adjoin)
+ (let* ((wc 0)
+ (fun
+ (handler-bind (((and warning (not style-warning))
+ (lambda (w) (incf wc))))
+ (compile nil `(lambda (item test test-not) (adjoin item '(1 2 3 :foo)
+ :test test
+ :test-not test-not))))))
+ (assert (= 1 wc))
+ (assert (eq :error
+ (handler-case
+ (funcall fun 1 #'eql (complement #'eql))
+ (error ()
+ :error))))))
\f
;;; success