2
;;;; Author: Paul Dietz
3
;;;; Created: Sat Oct 5 12:52:18 2002
4
;;;; Contains: Tests associated with the class CHARACTER
8
(deftest character-class.1
9
(subtypep* 'character t)
13
(subtypep* 'base-char 'character)
17
(subtypep* 'base-char t)
21
(every #'(lambda (c) (typep c 'base-char)) +standard-chars+)
24
(deftest standard-char.1
25
(subtypep* 'standard-char 'base-char)
28
(deftest standard-char.2
29
(subtypep* 'standard-char 'character)
32
(deftest standard-char.3
33
(subtypep* 'standard-char t)
36
(deftest standard-char.4
37
(every #'(lambda (c) (typep c 'standard-char)) +standard-chars+)
40
(deftest standard-char.5
41
(standard-char.5.body)
44
(deftest extended-char.1
45
(subtypep* 'extended-char 'character)
48
(deftest extended-char.2
49
(subtypep* 'extended-char t)
52
(deftest extended-char.3
53
(extended-char.3.body)
66
(deftest character.order.1
69
(character (progn (incf i) #\a))
73
(deftest character.error.1
74
(signals-error (character) program-error)
77
(deftest character.error.2
78
(signals-error (character #\a #\a) program-error)
84
(every #'characterp +standard-chars+)
95
(deftest characterp.order.1
102
(deftest characterp.error.1
103
(signals-error (characterp) program-error)
106
(deftest characterp.error.2
107
(signals-error (characterp #\a #\b) program-error)
111
(deftest alpha-char-p.1
112
(loop for c across +standard-chars+
114
(or (find c +alpha-chars+)
115
(not (alpha-char-p c))))
120
(deftest alpha-char-p.2
121
(every #'alpha-char-p +alpha-chars+)
124
(deftest alpha-char-p.3
125
(char-type-error-check #'alpha-char-p)
128
(deftest alpha-char-p.order.1
131
(alpha-char-p (progn (incf i) #\8))
135
(deftest alpha-char-p.error.1
136
(signals-error (alpha-char-p) program-error)
139
(deftest alpha-char-p.error.2
140
(signals-error (alpha-char-p #\a #\b) program-error)
145
(deftest alphanumericp.1
146
(loop for c across +standard-chars+
148
(or (find c +alphanumeric-chars+)
149
(not (alphanumericp c))))
152
(deftest alphanumericp.2
153
(every #'alphanumericp +alphanumeric-chars+)
156
(deftest alphanumericp.3
157
(char-type-error-check #'alphanumericp)
160
(deftest alphanumericp.4
161
(alphanumericp.4.body)
164
(deftest alphanumericp.5
165
(alphanumericp.5.body)
168
(deftest alphanumericp.order.1
171
(alphanumericp (progn (incf i) #\?))
175
(deftest alphanumericp.error.1
176
(signals-error (alphanumericp) program-error)
179
(deftest alphanumericp.error.2
180
(signals-error (alphanumericp #\a #\b) program-error)
185
(deftest digit-char.1
189
(deftest digit-char.2
190
(map 'list #'digit-char (loop for i from 0 to 39 collect i))
191
(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9
192
nil nil nil nil nil nil nil nil nil nil
193
nil nil nil nil nil nil nil nil nil nil
194
nil nil nil nil nil nil nil nil nil nil))
196
(deftest digit-char.order.1
199
(digit-char (incf i))
203
(deftest digit-char.order.2
206
(digit-char (incf i) (progn (setf x (incf i)) 10))
210
(deftest digit-char.error.1
211
(signals-error (digit-char) program-error)
214
(deftest digit-char.error.2
215
(signals-error (digit-char 0 10 'foo) program-error)
220
(deftest digit-char-p.1
221
(digit-char-p.1.body)
224
(deftest digit-char-p.2
225
(digit-char-p.2.body)
228
(deftest digit-char-p.3
229
(digit-char-p.3.body)
232
(deftest digit-char-p.4
233
(digit-char-p.4.body)
236
(deftest digit-char-p.5
237
(loop for i from 10 to 35
238
for c = (char +extended-digit-chars+ i)
239
never (or (digit-char-p c)
240
(digit-char-p (char-downcase c))))
243
(deftest digit-char-p.6
244
(loop for i from 0 below 10
245
for c = (char +extended-digit-chars+ i)
246
always (eqlt (digit-char-p c) i))
249
(deftest digit-char-p.order.1
252
(digit-char-p (progn (incf i) #\0))
256
(deftest digit-char-p.order.2
259
(digit-char-p (progn (setf x (incf i)) #\0)
260
(progn (setf y (incf i)) 10))
264
(deftest digit-char-p.error.1
265
(signals-error (digit-char-p) program-error)
268
(deftest digit-char-p.error.2
269
(signals-error (digit-char-p #\1 10 'foo) program-error)
274
(deftest graphic-char-p.1
275
(loop for c across +standard-chars+
276
always (if (eqlt c #\Newline)
277
(not (graphic-char-p c))
281
(deftest graphic-char-p.2
283
for name in '("Rubout" "Page" "Backspace" "Tab" "Linefeed" "Return")
284
for c = (name-char name)
285
when (and c (graphic-char-p c)) collect c)
288
(deftest graphic-char-p.3
289
(char-type-error-check #'graphic-char-p)
292
(deftest graphic-char-p.order.1
295
(not (graphic-char-p (progn (incf i) #\a)))
299
(deftest graphic-char-p.error.1
300
(signals-error (graphic-char-p) program-error)
303
(deftest graphic-char-p.error.2
304
(signals-error (graphic-char-p #\a #\a) program-error)
309
(deftest standard-char-p.1
310
(every #'standard-char-p +standard-chars+)
313
(deftest standard-char-p.2
314
(standard-char-p.2.body)
317
(deftest standard-char-p.2a
318
(standard-char-p.2a.body)
321
(deftest standard-char-p.3
322
(char-type-error-check #'standard-char-p)
325
(deftest standard-char-p.order.1
328
(not (standard-char-p (progn (incf i) #\a)))
332
(deftest standard-char-p.error.1
333
(signals-error (standard-char-p) program-error)
336
(deftest standard-char-p.error.2
337
(signals-error (standard-char-p #\a #\a) program-error)
342
(deftest char-upcase.1
346
(deftest char-upcase.2
350
(deftest char-upcase.3
351
(map 'string #'char-upcase +alpha-chars+)
352
"ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ")
354
(deftest char-upcase.4
355
(char-type-error-check #'char-upcase)
358
(deftest char-upcase.order.1
361
(char-upcase (progn (incf i) #\a))
365
(deftest char-upcase.error.1
366
(signals-error (char-upcase) program-error)
369
(deftest char-upcase.error.2
370
(signals-error (char-upcase #\a #\a) program-error)
375
(deftest char-downcase.1
376
(char-downcase.1.body)
379
(deftest char-downcase.2
380
(char-downcase.2.body)
383
(deftest char-downcase.3
384
(map 'string #'char-downcase +alpha-chars+)
385
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz")
387
(deftest char-downcase.4
388
(char-type-error-check #'char-downcase)
391
(deftest char-downcase.order.1
394
(char-downcase (progn (incf i) #\A))
398
(deftest char-downcase.error.1
399
(signals-error (char-downcase) program-error)
402
(deftest char-downcase.error.2
403
(signals-error (char-downcase #\A #\A) program-error)
408
(deftest upper-case-p.1
409
(find-if-not #'upper-case-p +standard-chars+ :start 26 :end 52)
412
(deftest upper-case-p.2
413
(find-if #'upper-case-p +standard-chars+ :end 26)
416
(deftest upper-case-p.3
417
(find #'upper-case-p +standard-chars+ :start 52)
420
(deftest upper-case-p.4
421
(char-type-error-check #'upper-case-p)
424
(deftest upper-case-p.order.1
427
(upper-case-p (progn (incf i) #\a))
431
(deftest upper-case-p.error.1
432
(signals-error (upper-case-p) program-error)
435
(deftest upper-case-p.error.2
436
(signals-error (upper-case-p #\a #\A) program-error)
441
(deftest lower-case-p.1
442
(find-if-not #'lower-case-p +standard-chars+ :end 26)
445
(deftest lower-case-p.2
446
(find-if #'lower-case-p +standard-chars+ :start 26)
449
(deftest lower-case-p.3
450
(char-type-error-check #'lower-case-p)
453
(deftest lower-case-p.order.1
456
(lower-case-p (progn (incf i) #\A))
460
(deftest lower-case-p.error.1
461
(signals-error (lower-case-p) program-error)
464
(deftest lower-case-p.error.2
465
(signals-error (lower-case-p #\a #\a) program-error)
470
(deftest both-case-p.1
474
(deftest both-case-p.2
478
(deftest both-case-p.3
479
(char-type-error-check #'both-case-p)
482
(deftest both-case-p.order.1
485
(both-case-p (progn (incf i) #\5))
489
(deftest both-case-p.error.1
490
(signals-error (both-case-p) program-error)
493
(deftest both-case-p.error.2
494
(signals-error (both-case-p #\a #\a) program-error)
500
(char-type-error-check #'char-code)
507
(deftest char-code.order.1
510
(not (numberp (char-code (progn (incf i) #\a))))
514
(deftest char-code.error.1
515
(signals-error (char-code) program-error)
518
(deftest char-code.error.2
519
(signals-error (char-code #\a #\a) program-error)
525
(loop for x across +standard-chars+
526
always (eqlt (code-char (char-code x)) x))
529
(deftest code-char.order.1
532
(code-char (progn (incf i) (char-code #\a)))
536
(deftest code-char.error.1
537
(signals-error (code-char) program-error)
540
(deftest code-char.error.2
541
(signals-error (code-char 1 1) program-error)
547
(loop for x across +standard-chars+
548
always (eqlt (char-int x) (char-code x)))
555
(deftest char-int.order.1
558
(code-char (char-int (progn (incf i) #\a)))
562
(deftest char-int.error.1
563
(signals-error (char-int) program-error)
566
(deftest char-int.error.2
567
(signals-error (char-int #\a #\a) program-error)
577
(notnot-mv (string= (char-name #\Space) "Space"))
581
(notnot-mv (string= (char-name #\Newline) "Newline"))
584
;;; Check that the names of various semi-standard characters are
585
;;; appropriate. This is complicated by the possibility that two different
586
;;; names may refer to the same character (as is allowed by the standard,
587
;;; for example in the case of Newline and Linefeed).
590
(loop for s in '("Rubout" "Page" "Backspace" "Return" "Tab" "Linefeed")
591
for c = (name-char s)
593
;; If the char-name is not even string-equal,
594
;; assume we're sharing the character with some other
595
;; name, and assume it's ok
596
(not (string-equal (char-name c) s))
597
(string= (char-name c) s))
598
;; Collect list of cases that failed
599
collect (list s c (char-name c)))
603
(char-type-error-check #'char-name)
606
(deftest char-name.order.1
609
(char-name (progn (incf i) #\Space))
613
(deftest char-name.error.1
614
(signals-error (char-name) program-error)
617
(deftest char-name.error.2
618
(signals-error (char-name #\a #\a) program-error)
628
(loop for s in '("RubOut" "PAGe" "BacKspace" "RetUrn" "Tab" "LineFeed"
631
(let ((c1 (name-char (string-upcase s)))
632
(c2 (name-char (string-downcase s)))
633
(c3 (name-char (string-capitalize s)))
635
(and (eqlt c1 c2) (eqlt c2 c3) (eqlt c3 c4))))
638
(deftest name-char.order.1
641
(name-char (progn (incf i) "Space"))
645
(deftest name-char.error.1
646
(signals-error (name-char) program-error)
649
(deftest name-char.error.2
650
(signals-error (name-char "space" "space") program-error)