diff --git a/ansi-tests/ansi-aux.lsp b/ansi-tests/ansi-aux.lsp index d02a41260abd31af77c9689a58a97203b81d69dc..27d479811d50ec303e263ba6178685f7737ae9a0 100644 --- a/ansi-tests/ansi-aux.lsp +++ b/ansi-tests/ansi-aux.lsp @@ -303,6 +303,7 @@ the condition to go uncaught if it cannot be classified." (reader-error () 'reader-error) (file-error () 'file-error) (cell-error () 'cell-error) + (parse-error () 'parse-error) (division-by-zero () 'division-by-zero) (floating-point-overflow () 'floating-point-overflow) (floating-point-underflow () 'floating-point-underflow) diff --git a/ansi-tests/parse-integer.lsp b/ansi-tests/parse-integer.lsp index 4ae3030b3efa64a411b150740cce355cd833bc8b..c2983ef18decd1de8d6d609a93980db13f8fd1aa 100644 --- a/ansi-tests/parse-integer.lsp +++ b/ansi-tests/parse-integer.lsp @@ -17,6 +17,62 @@ (classify-error (parse-integer "123" :bogus 'foo)) program-error) +(deftest parse-integer.error.4 + (classify-error (parse-integer "")) + parse-error) + +(deftest parse-integer.error.5 + (loop for x across +standard-chars+ + unless (or (digit-char-p x) + (eq (eval `(classify-error (parse-integer ,(string c)))) + 'parse-error)) + collect x) + nil) + +(deftest parse-integer.error.5 + (classify-error (parse-integer "")) + parse-error) + +(deftest parse-integer.error.6 + (classify-error (parse-integer "1234a")) + parse-error) + +(deftest parse-integer.error.7 + (classify-error (parse-integer "-")) + parse-error) + +(deftest parse-integer.error.8 + (classify-error (parse-integer "+")) + parse-error) + +(deftest parse-integer.error.9 + (classify-error (parse-integer "--10")) + parse-error) + +(deftest parse-integer.error.10 + (classify-error (parse-integer "++10")) + parse-error) + +(deftest parse-integer.error.11 + (classify-error (parse-integer "10.")) + parse-error) + +(deftest parse-integer.error.12 + (classify-error (parse-integer "#O123")) + parse-error) + +(deftest parse-integer.error.13 + (classify-error (parse-integer "#B0100")) + parse-error) + +(deftest parse-integer.error.14 + (classify-error (parse-integer "#X0100")) + parse-error) + +(deftest parse-integer.error.15 + (classify-error (parse-integer "#3R0100")) + parse-error) + ;;; (deftest parse-integer.1 @@ -91,3 +147,103 @@ (deftest parse-integer.15 (parse-integer "1021" :radix 3) 34 4) + +(deftest parse-integer.16 + (loop for radix from 2 to 36 + for c across "123456789abcdefghijklmnopqrstuvwxyz" + for s = (concatenate 'string (string c) "0") + for vals = (multiple-value-list (parse-integer s :radix radix)) + for (val pos) = vals + always (and (= (length vals) 2) + (= pos 2) + (= val (* radix (1- radix))))) + t) + +(deftest parse-integer.17 + (parse-integer "10A" :junk-allowed t) + 10 2) + +(deftest parse-integer.18 + (parse-integer "10" :junk-allowed t) + 10 2) + +(deftest parse-integer.19 + (parse-integer "ABCDE" :junk-allowed t) + nil 0) + +(deftest parse-integer.20 + (parse-integer "" :junk-allowed t) + nil 0) + +(deftest parse-integer.21 + :notes (:nil-vectors-are-strings) + (parse-integer (make-array 0 :element-type nil) :junk-allowed t) + nil 0) + +(deftest parse-integer.22 + (parse-integer "a1234b" :start 2 :end 4) + 23 4) + +(deftest parse-integer.23 + (parse-integer "a1234b" :start 2 :end 4 :end nil) + 23 4) + +(deftest parse-integer.24 + (parse-integer "a1234b" :start 2 :end 4 :start 1) + 23 4) + + +(deftest parse-integer.25 + (parse-integer "a1234b" :start 2 :end 4 :allow-other-keys nil) + 23 4) + +(deftest parse-integer.26 + (parse-integer "a1234b" :start 2 :end 4 :allow-other-keys t :foo nil) + 23 4) + +(deftest parse-integer.27 + (parse-integer "a1234b" :start 2 :end 4 :allow-other-keys t + :allow-other-keys nil :foo nil) + 23 4) + +(deftest parse-integer.28 + (let* ((s (make-array 5 :initial-contents "a123b" :element-type 'base-char)) + (s2 (make-array 3 :displaced-to s :displaced-index-offset 1 + :element-type 'base-char))) + (values + s2 + (length s2) + (equalpt "123" s2) + (multiple-value-list (parse-integer s2)))) + "123" 3 t (123 3)) + +(deftest parse-integer.29 + (let ((s (make-array 10 :initial-contents "1234567890" + :fill-pointer 3 + :element-type 'base-char))) + (values + (length s) + (multiple-value-list (parse-integer s)))) + 3 (123 3)) + +(deftest parse-integer.30 + (let ((s (make-array 10 :initial-contents "1234567890" + :adjustable t + :element-type 'base-char))) + (values + (length s) + (multiple-value-list (parse-integer s)) + (progn + (adjust-array s 3 :element-type 'base-char) + (multiple-value-list (parse-integer s))))) + 10 + (1234567890 10) + (123 3)) + + + + + + + + \ No newline at end of file