;;;; 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)
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)
;;; FILL on lists
(let ((l (list 1 2 3)))
- (fill l 0 :start 1 :end 2)
+ (assert (eq l (fill l 0 :start 1 :end 2)))
(assert (equal l '(1 0 3)))
- (fill l 'x :start 2 :end 3)
+ (assert (eq l (fill l 'x :start 2 :end 3)))
(assert (equal l '(1 0 x)))
- (fill l 'y :start 1)
+ (assert (eq l (fill l 'y :start 1)))
(assert (equal l '(1 y y)))
- (fill l 'z :end 2)
+ (assert (eq l (fill l 'z :end 2)))
(assert (equal l '(z z y)))
- (fill l 1)
+ (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
+;;; tests of deftype types equivalent to STRING or SIMPLE-STRING
+(deftype %string () 'string)
+(deftype %simple-string () 'simple-string)
+(deftype string-3 () '(string 3))
+(deftype simple-string-3 () '(simple-string 3))
+
+(with-test (:name :user-defined-string-types-map-etc)
+ (dolist (type '(%string %simple-string string-3 simple-string-3))
+ (assert (string= "foo" (coerce '(#\f #\o #\o) type)))
+ (assert (string= "foo" (map type 'identity #(#\f #\o #\o))))
+ (assert (string= "foo" (merge type '(#\o) '(#\f #\o) 'char<)))
+ (assert (string= "foo" (concatenate type '(#\f) "oo")))
+ (assert (string= "ooo" (make-sequence type 3 :initial-element #\o)))))
+(with-test (:name :user-defined-string-types-map-etc-error)
+ (dolist (type '(string-3 simple-string-3))
+ (assert (raises-error? (coerce '(#\q #\u #\u #\x) type)))
+ (assert (raises-error? (map type 'identity #(#\q #\u #\u #\x))))
+ (assert (raises-error? (merge type '(#\q #\x) "uu" 'char<)))
+ (assert (raises-error? (concatenate type "qu" '(#\u #\x))))
+ (assert (raises-error? (make-sequence type 4 :initial-element #\u)))))
+
;;; success