/[gcl]/gcl/ansi-tests/syntax.lsp
ViewVC logotype

Diff of /gcl/ansi-tests/syntax.lsp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by pfdietz, Sun Jan 2 15:27:16 2005 UTC revision 1.4 by pfdietz, Tue Jan 4 15:18:31 2005 UTC
# Line 5  Line 5 
5    
6  (in-package :cl-test)  (in-package :cl-test)
7    
 (defmacro def-syntax-test (name form &rest expected-results)  
   `(deftest ,name  
      (with-standard-io-syntax ,form)  
      ,@expected-results))  
   
8  ;;; Test that  ;;; Test that
9  (def-syntax-test syntax.whitespace.1  (def-syntax-test syntax.whitespace.1
10    ;; Check that various standard or semistandard characters are whitespace[2]    ;; Check that various standard or semistandard characters are whitespace[2]
# Line 165  Line 160 
160                  (list (list name c s val)))))))                  (list (list name c s val)))))))
161    nil)    nil)
162    
163  #|  ;;;
164    ;;; CLtS appears to be inconsistent on the next test.
165    ;;; Compare the definition of 'invalid' with the specification
166    ;;; of the token reading algorithm.
167    ;;;
168  (def-syntax-test syntax.escape.whitespace.2  (def-syntax-test syntax.escape.whitespace.2
169    (let ((names '("Tab" "Newline" "Linefeed" "Space" "Return" "Page")))    (let ((names '("Tab" "Newline" "Linefeed" "Space" "Return" "Page")))
170      (loop for name in names      (loop for name in names
# Line 177  Line 176 
176                (unless (eql val (intern (string c)))                (unless (eql val (intern (string c)))
177                  (list (list name c s val)))))))                  (list (list name c s val)))))))
178    nil)    nil)
 |#  
179    
180    #|
181  (def-syntax-test syntax.multiple-escape.invalid.backspace  (def-syntax-test syntax.multiple-escape.invalid.backspace
182    (let ((c (name-char "Backspace")))    (let ((c (name-char "Backspace")))
183      (or (not c)      (or (not c)
# Line 192  Line 191 
191          (let ((s (concatenate 'string "|" (string c) "|")))          (let ((s (concatenate 'string "|" (string c) "|")))
192            (eval `(signals-error (read-from-string ',s) reader-error)))))            (eval `(signals-error (read-from-string ',s) reader-error)))))
193    t)    t)
194    |#
195    
196    
197    ;;; Tests of #\
198    
199    (def-syntax-test syntax.sharp-backslash.1
200      (loop for c across +standard-chars+
201            for s = (concatenate 'string "#\\" (string c))
202            for c2 = (read-from-string s)
203            unless (eql c c2)
204            collect (list c s c2))
205      nil)
206    
207    (def-syntax-test syntax.sharp-backslash.2
208      (let ((count 0))
209        (loop for i below (min 65536 char-code-limit)
210              for c = (code-char i)
211              for s = (and c (concatenate 'string "#\\" (string c)))
212              for c2 = (and c (read-from-string s))
213              unless (eql c c2)
214              collect (progn (when (> (incf count) 100) (loop-finish))
215                             (list c s c2))))
216      nil)
217    
218    (def-syntax-test syntax.sharp-backslash.3
219      (loop for i = (random (min (ash 1 24) char-code-limit))
220            for c = (code-char i)
221            for s = (and c (concatenate 'string "#\\" (string c)))
222            for c2 = (and c (read-from-string s))
223            repeat 1000
224            unless (eql c c2)
225            collect (list i c s c2))
226      nil)
227    
228    (def-syntax-test syntax.sharp-backslash.4
229      (flet ((%f (s) (read-from-string (concatenate 'string "#\\" s))))
230        (loop for s in '("SPACE" "NEWLINE" "TAB" "RUBOUT" "BACKSPACE" "PAGE" "LINEFEED" "RETURN")
231              for c = (name-char s)
232              unless (or (null c)
233                         (and (eql (%f s) c)
234                              (eql (%f (string-downcase s)) c)
235                              (eql (%f (string-capitalize s)) c)))
236              collect (list s c)))
237      nil)
238    
239    (def-syntax-test syntax.sharp-backslash.5
240      (flet ((%f (s) (read-from-string (concatenate 'string "#\\" s))))
241        (loop for c across +standard-chars+
242              for name = (char-name c)
243              unless (or (null name)
244                         (and (eql (%f name) c)
245                              (eql (%f (string-downcase name)) c)
246                              (eql (%f (string-upcase name)) c)
247                              (eql (%f (string-capitalize name)) c)))
248              collect (list c name)))
249      nil)
250    
251    (def-syntax-test syntax.sharp-backslash.6
252      (flet ((%f (s) (read-from-string (concatenate 'string "#\\" s))))
253        (loop for i below (min 65536 char-code-limit)
254              for c = (code-char i)
255              for name = (and c (char-name c))
256              unless (or (null name)
257                         (and (eql (%f name) c)
258                              (eql (%f (string-downcase name)) c)
259                              (eql (%f (string-upcase name)) c)
260                              (eql (%f (string-capitalize name)) c)))
261              collect (list i c name)))
262      nil)
263    
264    (def-syntax-test syntax.sharp-backslash.7
265      (flet ((%f (s) (read-from-string (concatenate 'string "#\\" s))))
266        (loop for i = (random (min (ash 1 24) char-code-limit))
267              for c = (code-char i)
268              for name = (and c (char-name c))
269              repeat 1000
270              unless (or (null name)
271                         (and (eql (%f name) c)
272                              (eql (%f (string-downcase name)) c)
273                              (eql (%f (string-upcase name)) c)
274                              (eql (%f (string-capitalize name)) c)))
275              collect (list i c name)))
276      nil)
277    
278    
279    ;;; Tests of #'
280    
281    (def-syntax-test syntax.sharp-quote.1
282      (read-from-string "#'X")
283      (function |X|) 3)
284    
285    (def-syntax-test syntax.sharp-quote.2
286      (read-from-string "#':X")
287      (function :|X|) 4)
288    
289    (def-syntax-test syntax.sharp-quote.3
290      (read-from-string "#'17")
291      (function 17) 4)
292    
293    (def-syntax-test syntax.sharp-quote.error.1
294      (signals-error (read-from-string "#'") end-of-file)
295      t)
296    
297    (def-syntax-test syntax.sharp-quote.error.2
298      (signals-error (read-from-string "(#'" nil nil) end-of-file)
299      t)
300    
301    ;;; Tess of #(...)
302    
303    (defmacro def-syntax-vector-test (name form &body expected-elements)
304      `(def-syntax-test ,name
305         (let ((v (read-from-string ,form)))
306           (assert (simple-vector-p v))
307           v)
308         ,(apply #'vector expected-elements)))
309    
310    (def-syntax-vector-test syntax.sharp-left-paren.1
311      "#()")
312    
313    (def-syntax-vector-test syntax.sharp-left-paren.2
314      "#0()")
315    
316    (def-syntax-vector-test syntax.sharp-left-paren.3
317      "#(a)" a)
318    
319    (def-syntax-vector-test syntax.sharp-left-paren.4
320      "#(a b c)" a b c)
321    
322    (def-syntax-vector-test syntax.sharp-left-paren.5
323      "#2(a)" a a)
324    
325    (def-syntax-vector-test syntax.sharp-left-paren.6
326      "#5(a b)" a b b b b)
327    
328    (def-syntax-vector-test syntax.sharp-left-paren.7
329      "#5(a b c d e)" a b c d e)
330    
331    (def-syntax-vector-test syntax.sharp-left-paren.8
332      "#9(a b c d e)" a b c d e e e e e)
333    
334    (def-syntax-test syntax.sharp-left-paren.9
335      (let ((*read-base* 2))
336        (read-from-string "#10(a)"))
337      #(a a a a a a a a a a)
338      6)
339    
340    (def-syntax-test syntax.sharp-left-paren.error.1
341      (signals-error (read-from-string "#(") end-of-file)
342      t)
343    
344    (def-syntax-test syntax.sharp-left-paren.error.2
345      (signals-error (read-from-string "(#(" nil nil) end-of-file)
346      t)
347    
348    ;;; Tests of #*
349    
350    (defmacro def-syntax-bit-vector-test (name form &body expected-elements)
351      `(def-syntax-test ,name
352         (let ((v (read-from-string ,form)))
353           (assert (simple-bit-vector-p v))
354           v)
355         ,(make-array (length expected-elements) :element-type 'bit :initial-contents expected-elements)))
356    
357    (def-syntax-bit-vector-test syntax.sharp-asterisk.1
358      "#*")
359    
360    (def-syntax-bit-vector-test syntax.sharp-asterisk.2
361      "#0*")
362    
363    (def-syntax-bit-vector-test syntax.sharp-asterisk.3
364      "#1*0" 0)
365    
366    (def-syntax-bit-vector-test syntax.sharp-asterisk.4
367      "#1*1" 1)
368    
369    (def-syntax-bit-vector-test syntax.sharp-asterisk.5
370      "#2*1" 1 1)
371    
372    (def-syntax-bit-vector-test syntax.sharp-asterisk.5
373      "#2*0" 0 0)
374    
375    (def-syntax-bit-vector-test syntax.sharp-asterisk.6
376      "#5*010" 0 1 0 0 0)
377    
378    (def-syntax-bit-vector-test syntax.sharp-asterisk.7
379      "#7*0101" 0 1 0 1 1 1 1)
380    
381    (def-syntax-bit-vector-test syntax.sharp-asterisk.8
382      "#10*01010" 0 1 0 1 0 0 0 0 0 0)
383    
384    (def-syntax-test syntax.sharp-asterisk.9
385      (let ((*read-base* 3))
386        (read-from-string "#10*01"))
387      #*0111111111
388      6)
389    
390    (def-syntax-test syntax.sharp-asterisk.10
391      (let ((*read-suppress* t))
392        (values (read-from-string "#1* ")))
393      nil)
394    
395    (def-syntax-test syntax.sharp-asterisk.11
396      (let ((*read-suppress* t))
397        (values (read-from-string "#1*00")))
398      nil)
399    
400    (def-syntax-test syntax.sharp-asterisk.12
401      (let ((*read-suppress* t))
402        (values (read-from-string "#*012")))
403      nil)
404    
405    (def-syntax-test syntax.sharp-asterisk.error.1
406      (signals-error (read-from-string "#1* X") reader-error)
407      t)
408    
409    (def-syntax-test syntax.sharp-asterisk.error.2
410      (signals-error (read-from-string "#2*011") reader-error)
411      t)
412    
413    (def-syntax-test syntax.sharp-asterisk.error.3
414      (signals-error (read-from-string "#*012") reader-error)
415      t)
416    
417    ;;; Tests of #: ...
418    
419    (defmacro def-syntax-unintern-test (name string)
420      `(deftest ,name
421         (let ((s (read-from-string ,(concatenate 'string "#:" string))))
422           (values
423            (symbol-package s)
424            (symbol-name s)))
425         nil ,(string-upcase string)))
426    
427    (def-syntax-unintern-test syntax.sharp-colon.1 "")
428    (def-syntax-unintern-test syntax.sharp-colon.2 "#")
429    (def-syntax-unintern-test syntax.sharp-colon.3 "a")
430    (def-syntax-unintern-test syntax.sharp-colon.4 "A")
431    (def-syntax-unintern-test syntax.sharp-colon.5 "NIL")
432    (def-syntax-unintern-test syntax.sharp-colon.6 "T")
433    (def-syntax-unintern-test syntax.sharp-colon.7 ".")
434    
435    
436    ;;; Tests of #.
437    
438    (def-syntax-test syntax.sharp-dot.1
439      (read-from-string "#.(+ 1 2)")
440      3 9)
441    
442    (def-syntax-test syntax.sharp-dot.2
443      (read-from-string "#.'X")
444      X 4)
445    
446    (def-syntax-test syntax.sharp-dot.error.1
447      (signals-error (read-from-string "#.") end-of-file)
448      t)
449    
450    (def-syntax-test syntax.sharp-dot.error.2
451      (signals-error (read-from-string "(#." nil nil) end-of-file)
452      t)
453    
454    (def-syntax-test syntax.sharp-dot.error.3
455      (signals-error (let ((*read-eval* nil)) (read-from-string "#.1")) reader-error)
456      t)
457    
458    ;;; Tests of #B
459    
460    (def-syntax-test syntax.sharp-b.1
461      (read-from-string "#b0")
462      0 3)
463    
464    (def-syntax-test syntax.sharp-b.2
465      (read-from-string "#B1")
466      1 3)
467    
468    (def-syntax-test syntax.sharp-b.3
469      (read-from-string "#b101101")
470      45 8)
471    
472    (def-syntax-test syntax.sharp-b.4
473      (read-from-string "#B101101")
474      45 8)
475    
476    (def-syntax-test syntax.sharp-b.5
477      (read-from-string "#b010001/100")
478      17/4 12)
479    
480    (def-syntax-test syntax.sharp-b.6
481      (read-from-string "#b-10011")
482      -19 8)
483    
484    (def-syntax-test syntax.sharp-b.7
485      (read-from-string "#B-1/10")
486      -1/2 7)
487    
488    (def-syntax-test syntax.sharp-b.8
489      (read-from-string "#B-0/10")
490      0 7)
491    
492    (def-syntax-test syntax.sharp-b.8
493      (read-from-string "#b0/111")
494      0 7)
495    
496    (def-syntax-test syntax.sharp-b.9
497      (let ((*read-eval* nil))
498        (read-from-string "#b-10/11"))
499      -2/3 8)
500    
501    ;;; Tests of #O
502    
503    (def-syntax-test syntax.sharp-o.1
504      (read-from-string "#o0")
505      0 3)
506    
507    (def-syntax-test syntax.sharp-o.2
508      (read-from-string "#O7")
509      7 3)
510    
511    (def-syntax-test syntax.sharp-o.3
512      (read-from-string "#o10")
513      8 4)
514    
515    (def-syntax-test syntax.sharp-o.4
516      (read-from-string "#O011")
517      9 5)
518    
519    (def-syntax-test syntax.sharp-o.5
520      (read-from-string "#o-0")
521      0 4)
522    
523    (def-syntax-test syntax.sharp-o.6
524      (read-from-string "#O-1")
525      -1 4)
526    
527    (def-syntax-test syntax.sharp-o.7
528      (read-from-string "#O11/10")
529      9/8 7)
530    
531    (def-syntax-test syntax.sharp-o.8
532      (read-from-string "#o-1/10")
533      -1/8 7)
534    
535    (def-syntax-test syntax.sharp-o.9
536      (read-from-string "#O0/10")
537      0 6)
538    
539    (def-syntax-test syntax.sharp-o.10
540      (let ((*read-eval* nil))
541        (read-from-string "#o-10/11"))
542      -8/9 8)
543    
544    ;;; Tests of #X
545    
546    (def-syntax-test syntax.sharp-x.1
547      (read-from-string "#x0")
548      0 3)
549    
550    (def-syntax-test syntax.sharp-x.2
551      (read-from-string "#X1")
552      1 3)
553    
554    (def-syntax-test syntax.sharp-x.3
555      (read-from-string "#xa")
556      10 3)
557    
558    (def-syntax-test syntax.sharp-x.4
559      (read-from-string "#Xb")
560      11 3)
561    
562    (def-syntax-test syntax.sharp-x.5
563      (read-from-string "#XC")
564      12 3)
565    
566    (def-syntax-test syntax.sharp-x.6
567      (read-from-string "#xD")
568      13 3)
569    
570    (def-syntax-test syntax.sharp-x.7
571      (read-from-string "#xe")
572      14 3)
573    
574    (def-syntax-test syntax.sharp-x.8
575      (read-from-string "#Xf")
576      15 3)
577    
578    (def-syntax-test syntax.sharp-x.9
579      (read-from-string "#x10")
580      16 4)
581    
582    (def-syntax-test syntax.sharp-x.10
583      (read-from-string "#X1ab")
584      427 5)
585    
586    (def-syntax-test syntax.sharp-x.11
587      (read-from-string "#x-1")
588      -1 4)
589    
590    (def-syntax-test syntax.sharp-x.12
591      (read-from-string "#X-0")
592      0 4)
593    
594    (def-syntax-test syntax.sharp-x.13
595      (read-from-string "#xa/B")
596      10/11 5)
597    
598    (def-syntax-test syntax.sharp-x.14
599      (read-from-string "#X-1/1c")
600      -1/28 7)
601    
602    (def-syntax-test syntax.sharp-x.15
603      (let ((*read-eval* nil))
604        (read-from-string "#x-10/11"))
605      -16/17 8)
606    
607    ;;; Tests of #nR
608    
609    (def-syntax-test syntax.sharp-r.1
610      (loop for i = (random (ash 1 (+ 2 (random 32))))
611            for base = (+ 2 (random 35))
612            for s = (let ((*print-base* base)) (write-to-string i))
613            for c = (random-from-seq "rR")
614            for s2 = (format nil "#~d~c~a" base c s)
615            for s3 = (rcase (1 (string-upcase s2))
616                            (1 (string-downcase s2))
617                            (1 (string-capitalize s2))
618                            (1 s2))
619            for base2 = (+ 2 (random 35))
620            for vals = (let ((*read-base* base2))
621                         (multiple-value-list
622                          (read-from-string s3)))
623            repeat 1000
624            unless (equal vals (list i (length s3) ))
625            collect (list i base s c s2 s3 base2 vals))
626      nil)
627    
628    (def-syntax-test syntax.sharp-r.2
629      (read-from-string "#2r0")
630      0 4)
631    
632    (def-syntax-test syntax.sharp-r.3
633      (read-from-string "#36r0")
634      0 5)
635    
636    (def-syntax-test syntax.sharp-r.4
637      (read-from-string "#29R-0")
638      0 6)
639    
640    (def-syntax-test syntax.sharp-r.5
641      (read-from-string "#23r-1")
642      -1 6)
643    
644    (def-syntax-test syntax.sharp-r.6
645      (read-from-string "#17r11")
646      18 6)
647    
648    (def-syntax-test syntax.sharp-t.7
649      (read-from-string "#3r10/11")
650      3/4 8)
651    
652    (def-syntax-test syntax.sharp-t.8
653      (read-from-string "#5R-10/11")
654      -5/6 9)
655    
656    ;;; Tests of #c
657    
658    (def-syntax-test syntax.sharp-c.1
659      (read-from-string "#c(1 1)")
660      #.(complex 1 1) 7)
661    
662    (def-syntax-test syntax.sharp-c.2
663      (read-from-string "#C(1 0)")
664      1 7)
665    
666    (def-syntax-test syntax.sharp-c.3
667      (read-from-string "#c(0 1)")
668      #.(complex 0 1) 7)
669    
670    (def-syntax-test syntax.sharp-c.4
671      (read-from-string "#c(-1/2 1)")
672      #.(complex -1/2 1) 10)
673    
674    (def-syntax-test syntax.sharp-c.5
675      (read-from-string "#c (1 1)")
676      #.(complex 1 1) 8)

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26