;-*- Mode:     Lisp -*-
;;;; Author:   Paul Dietz
;;;; Created:  Tue Jul 27 23:07:16 2004
;;;; Contains: Tests of formatted output, ~C directive





;;; Test of the ~C directive

(deftest format.c.1
  (loop for c across +standard-chars+
        for s = (format nil "~C" c)
        unless (string= s (string c))
        collect (list c s))
  nil)

(deftest format.c.1a
  (loop with count = 0
        for i from 0 below (min #x10000 char-code-limit)
        for c = (code-char i)
        for s = (and c (format nil "~c" c))
        unless (or (not c)
                   (not (eql (char-code c) (char-int c)))
                   (string= s (string c)))
        do (incf count) and collect (list i c s)
        when (> count 100) collect "count limit exceeded" and do (loop-finish))
  nil)

(deftest format.c.2
  (loop for c across +standard-chars+
        for s = (format nil "~:c" c)
        unless (or (not (graphic-char-p c))
                   (eql c #\Space)
                   (string= s (string c)))
        collect (list c s))
  nil)

(deftest format.c.2a
  (loop with count = 0
        for i from 0 below (min #x10000 char-code-limit)
        for c = (code-char i)
        for s = (and c (format nil "~:C" c))
        unless (or (not c)
                   (not (eql (char-code c) (char-int c)))
                   (not (graphic-char-p c))
                   (eql c #\Space)
                   (string= s (string c)))
        do (incf count) and collect (list i c s)
        when (> count 100) collect "count limit exceeded" and do (loop-finish))
  nil)

(def-format-test format.c.3
  "~:C" (#\Space) #.(char-name #\Space))

(deftest format.c.4
  (loop for c across +standard-chars+
        for s = (format nil "~:C" c)
        unless (or (graphic-char-p c)
                   (string= s (char-name c)))
        collect (list c (char-name c) s))
  nil)

(deftest format.c.4a
  (loop with count = 0
        for i from 0 below (min #x10000 char-code-limit)
        for c = (code-char i)
        for s = (and c (format nil "~:c" c))
        unless (or (not c)
                   (not (eql (char-code c) (char-int c)))
                   (graphic-char-p c)
                   (string= s (char-name c)))
        do (incf count) and collect (print (list i c s))
        when (> count 100) collect "count limit exceeded" and do (loop-finish))
  nil)

(deftest format.c.5
  (loop for c across +standard-chars+
        for s = (format nil "~@c" c)
        for c2 = (read-from-string s)
        unless (eql c c2)
        collect (list c s c2))
  nil)

(deftest format.c.5a
  (loop with count = 0
        for i from 0 below (min #x10000 char-code-limit)
        for c = (code-char i)
        for s = (and c (format nil "~@C" c))
        for c2 = (and c (read-from-string s))
        unless (eql c c2)
        do (incf count) and collect (list c s c2)
        when (> count 100) collect "count limit exceeded" and do (loop-finish))
  nil)

(deftest format.c.6
  (loop for c across +standard-chars+
        for s1 = (format nil "~:C" c)
        for s2 = (format nil "~:@C" c)
        unless (eql (search s1 s2) 0)
        collect (list c s1 s2))
  nil)

(deftest format.c.6a
  (loop with count = 0
        for i from 0 below (min #x10000 char-code-limit)
        for c = (code-char i)
        for s1 = (and c (format nil "~:C" c))
        for s2 = (and c (format nil "~@:C" c))
        unless (or (not c) (eql (search s1 s2) 0))
        do (incf count) and collect (list c s1 s2)
        when (> count 100) collect "count limit exceeded" and do (loop-finish))
  nil)



