source: trunk/source/tests/ansi-tests/parse-integer.lsp @ 8991

Last change on this file since 8991 was 8991, checked in by gz, 12 years ago

Check in the gcl ansi test suite (original, in preparation for making local changes)

File size: 7.4 KB
Line 
1;-*- Mode:     Lisp -*-
2;;;; Author:   Paul Dietz
3;;;; Created:  Sun Sep  7 10:24:13 2003
4;;;; Contains: Tests of PARSE-INTEGER
5
6(in-package :cl-test)
7
8(deftest parse-integer.error.1
9  (signals-error (parse-integer) program-error)
10  t)
11
12(deftest parse-integer.error.2
13  (signals-error (parse-integer "123" :bogus) program-error)
14  t)
15
16(deftest parse-integer.error.3
17  (signals-error (parse-integer "123" :bogus 'foo) program-error)
18  t)
19
20(deftest parse-integer.error.4
21  (signals-error (parse-integer "") parse-error)
22  t)
23
24(deftest parse-integer.error.5
25  (loop for x across +standard-chars+
26        unless (or (digit-char-p x)
27                   (eval `(signals-error (parse-integer ,(string x))
28                                         parse-error)))
29        collect x)
30  nil)
31
32(deftest parse-integer.error.5a
33  (signals-error (parse-integer "") parse-error)
34  t)
35
36(deftest parse-integer.error.6
37  (signals-error (parse-integer "1234a") parse-error)
38  t)
39
40(deftest parse-integer.error.7
41  (signals-error (parse-integer "-") parse-error)
42  t)
43
44(deftest parse-integer.error.8
45  (signals-error (parse-integer "+") parse-error)
46  t)
47
48(deftest parse-integer.error.9
49  (signals-error (parse-integer "--10") parse-error)
50  t)
51
52(deftest parse-integer.error.10
53  (signals-error (parse-integer "++10") parse-error)
54  t)
55
56(deftest parse-integer.error.11
57  (signals-error (parse-integer "10.") parse-error)
58  t)
59
60(deftest parse-integer.error.12
61  (signals-error (parse-integer "#O123") parse-error)
62  t)
63
64(deftest parse-integer.error.13
65  (signals-error (parse-integer "#B0100") parse-error)
66  t)
67
68(deftest parse-integer.error.14
69  (signals-error (parse-integer "#X0100") parse-error)
70  t)
71
72(deftest parse-integer.error.15
73  (signals-error (parse-integer "#3R0100") parse-error)
74  t)
75
76;;;
77
78(deftest parse-integer.1
79  (parse-integer "123")
80  123 3)
81
82(deftest parse-integer.2
83  (parse-integer " 123")
84  123 4)
85
86(deftest parse-integer.3
87  (parse-integer "    12345678901234567890   ")
88  12345678901234567890 27)
89
90(deftest parse-integer.4
91  (parse-integer (concatenate 'string (string #\Newline) "17"
92                              (string #\Newline)))
93  17 4)
94
95(deftest parse-integer.5
96  (let ((c (name-char "Tab")))
97    (if c
98        (parse-integer (concatenate 'string (string c) "6381" (string c)))
99      (values 6381 6)))
100  6381 6)
101
102(deftest parse-integer.6
103  (let ((c (name-char "Linefeed")))
104    (if c
105        (parse-integer (concatenate 'string (string c) "-123712" (string c)))
106      (values -123712 9)))
107  -123712 9)
108
109(deftest parse-integer.7
110  (let ((c (name-char "Page")))
111    (if c
112        (parse-integer (concatenate 'string (string c) "0" (string c)))
113      (values 0 3)))
114  0 3)
115
116(deftest parse-integer.8
117  (let ((c (name-char "Return")))
118    (if c
119        (parse-integer (concatenate 'string (string c) "999" (string c)))
120      (values 999 5)))
121  999 5)
122
123(deftest parse-integer.9
124  (parse-integer "-0")
125  0 2)
126
127(deftest parse-integer.10
128  (parse-integer "+0")
129  0 2)
130
131(deftest parse-integer.11
132  (parse-integer "-00")
133  0 3)
134
135(deftest parse-integer.12
136  (parse-integer "+000")
137  0 4)
138
139(deftest parse-integer.13
140  (parse-integer "00010")
141  10 5)
142
143(deftest parse-integer.14
144  (parse-integer "10110" :radix 2)
145  22 5)
146
147(deftest parse-integer.15
148  (parse-integer "1021" :radix 3)
149  34 4)
150
151(deftest parse-integer.16
152  (loop for radix from 2 to 36
153        for c across "123456789abcdefghijklmnopqrstuvwxyz"
154        for s = (concatenate 'string (string c) "0")
155        for vals = (multiple-value-list (parse-integer s :radix radix))
156        for (val pos) = vals
157        always (and (= (length vals) 2)
158                    (= pos 2)
159                    (= val (* radix (1- radix)))))
160  t)
161
162(deftest parse-integer.17
163  (parse-integer "10A" :junk-allowed t)
164  10 2)
165
166(deftest parse-integer.18
167  (parse-integer "10" :junk-allowed t)
168  10 2)
169
170(deftest parse-integer.19
171  (parse-integer "ABCDE" :junk-allowed t)
172  nil 0)
173
174(deftest parse-integer.20
175  (parse-integer "" :junk-allowed t)
176  nil 0)
177
178(deftest parse-integer.21
179  :notes (:nil-vectors-are-strings)
180  (parse-integer (make-array 0 :element-type nil) :junk-allowed t)
181  nil 0)
182
183(deftest parse-integer.22
184  (parse-integer "a1234b" :start 2 :end 4)
185  23 4)
186
187(deftest parse-integer.23
188  (parse-integer "a1234b" :start 2 :end 4 :end nil)
189  23 4)
190
191(deftest parse-integer.24
192  (parse-integer "a1234b" :start 2 :end 4 :start 1)
193  23 4)
194
195
196(deftest parse-integer.25
197  (parse-integer "a1234b" :start 2 :end 4 :allow-other-keys nil)
198  23 4)
199
200(deftest parse-integer.26
201  (parse-integer "a1234b" :start 2 :end 4 :allow-other-keys t :foo nil)
202  23 4)
203
204(deftest parse-integer.27
205  (parse-integer "a1234b" :start 2 :end 4 :allow-other-keys t
206                 :allow-other-keys nil :foo nil)
207  23 4)
208
209(deftest parse-integer.28
210  (let* ((s (make-array 5 :initial-contents "a123b" :element-type 'base-char))
211         (s2 (make-array 3 :displaced-to s :displaced-index-offset 1
212                         :element-type 'base-char)))
213    (values
214     s2
215     (length s2)
216     (equalpt "123" s2)
217     (multiple-value-list (parse-integer s2))))
218  "123" 3 t (123 3))
219
220(deftest parse-integer.28a
221  (let* ((s (make-array 5 :initial-contents "a123b" :element-type 'character))
222         (s2 (make-array 3 :displaced-to s :displaced-index-offset 1
223                         :element-type 'character)))
224    (values
225     s2
226     (length s2)
227     (equalpt "123" s2)
228     (multiple-value-list (parse-integer s2))))
229  "123" 3 t (123 3))
230
231(deftest parse-integer.29
232  (let ((s (make-array 10 :initial-contents "1234567890"
233                       :fill-pointer 3
234                       :element-type 'base-char)))
235    (values
236     (length s)
237     (multiple-value-list (parse-integer s))))
238  3 (123 3))
239
240(deftest parse-integer.29a
241  (let ((s (make-array 10 :initial-contents "1234567890"
242                       :fill-pointer 3
243                       :element-type 'character)))
244    (values
245     (length s)
246     (multiple-value-list (parse-integer s))))
247  3 (123 3))
248
249(deftest parse-integer.30
250  (let ((s (make-array 10 :initial-contents "1234567890"
251                       :adjustable t
252                       :element-type 'base-char)))
253    (values
254     (length s)
255     (multiple-value-list (parse-integer s))
256     (progn
257       (adjust-array s 3 :element-type 'base-char)
258       (multiple-value-list (parse-integer s)))))
259  10
260  (1234567890 10)
261  (123 3))
262
263(deftest parse-integer.30a
264  (let ((s (make-array 10 :initial-contents "1234567890"
265                       :adjustable t
266                       :element-type 'character)))
267    (values
268     (length s)
269     (multiple-value-list (parse-integer s))
270     (progn
271       (adjust-array s 3 :element-type 'character)
272       (multiple-value-list (parse-integer s)))))
273  10
274  (1234567890 10)
275  (123 3))
276
277(deftest parse-integer.31
278  (parse-integer "1234" :start 1)
279  234 4)
280
281(deftest parse-integer.32
282  (parse-integer "1234" :start 1 :end nil)
283  234 4)
284
285(deftest parse-integer.33
286  (let* ((s (make-array 5 :initial-contents "a123b" :element-type 'base-char))
287         (s2 (make-array 3 :displaced-to s :displaced-index-offset 1
288                         :element-type 'base-char))
289         (s3 (make-array 2 :displaced-to s2 :displaced-index-offset 1
290                         :element-type 'base-char)))
291    (values
292     s3
293     (length s3)
294     (equalpt "23" s3)
295     (multiple-value-list (parse-integer s3))))
296  "23" 2 t (23 2))
297
298(deftest parse-integer.34
299  (parse-integer "1234" :end 3)
300  123 3)
301
302(deftest parse-integer.35
303  (parse-integer "1234" :end 3 :end 1)
304  123 3)
305
306(deftest parse-integer.36
307  (parse-integer "1234" :end nil :end 3)
308  1234 4)
309
310;;; Order of evaluation tests
311
312(deftest parse-integer.order.1
313  (let ((i 0) a b c d e)
314    (values
315     (multiple-value-list
316      (parse-integer (progn (setf a (incf i)) "10001")
317                     :radix (progn (setf b (incf i)) 2)
318                     :start (progn (setf c (incf i)) 0)
319                     :end (progn (setf d (incf i)) 5)
320                     :junk-allowed (progn (setf e (incf i)) nil)))
321     i a b c d e))
322  (17 5) 5 1 2 3 4 5)
Note: See TracBrowser for help on using the repository browser.