X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fseq.impure.lisp;h=7de07561da366d526d0455b0c0e998c7c0a6ae27;hb=1d238a6b36387151202940a95b7cec7ad7d14e9b;hp=f6e79d325da5fcc0a926e39da273c2ae7d1d81be;hpb=ba871531b6b394da295c9a4527346e1e6327ccca;p=sbcl.git diff --git a/tests/seq.impure.lisp b/tests/seq.impure.lisp index f6e79d3..7de0756 100644 --- a/tests/seq.impure.lisp +++ b/tests/seq.impure.lisp @@ -13,10 +13,11 @@ ;;;; 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) @@ -957,7 +958,8 @@ 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) @@ -1086,18 +1088,55 @@ ;;; 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)))))) +;;; 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