[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Fixed fix of ~w,dF



I got the padding wrong on the last version.  Here is a corrected version of 
FORMAT (attached) and test cases.

(expect "     1.020" (format "~10,3F" 1.02))

(expect "     1.025" (format "~10,3F" 1.025))

(expect "     1.026" (format "~10,3F" 1.0256))

(expect "     1.002" (format "~10,3F" 1.002))

(expect "     1.002" (format "~10,3F" 1.0025))

(expect "     1.003" (format "~10,3F" 1.00256))

Additional test cases welcome.


Cheers,
-KenD
; (define-syntax expect
;   (syntax-rules ()
;     ((expect ?expected ?form) ;=>
;      (expect ?expected ?form equal?)
;     )
;     ((expect ?expected ?form ?compare) ;=>
;      (let ( (expected ?expected)
;             (actual   ?form)
;           )
;        (if (?compare expected actual)
; 	   (format #t "PASSED:  ~w~%" '?form)
;            (format #t 
; 		    "~%**FAIL: expected: ~w~% got: ~w~% from: ~w~%"
; 		    expected
; 		    actual
; 		    '?form)))
;     )
; ) )

;; Or old style macros [Gambit]
;
(define-macro (expect expected form . compare)
  (let* ( (same? (if (null? compare) equal? (eval (car `,compare))))
          (wanted (eval `,expected))
          (actual (eval `,form))
        )
    (if (same? wanted actual)
        (format #t "PASSED:  ~s~%" form)
        (format #t 
                "~%**FAIL: expected: ~s~% got:  ~s~% from: ~s~%"
                wanted
                actual
                form))
) )
        

;;;===================================================

(expect (format "test ~s" 'me) (format #f "test ~a" "me"))

(expect  " 0.333" (format "~6,3F" 1/3)) ;;; "  .333" OK

(expect "  12" (format "~4F" 12))

(expect "  12.346" (format "~8,3F" 12.3456))

(expect "123.346" (format "~6,3F" 123.3456))

(expect "123.346" (format "~4,3F" 123.3456))

(expect "0.000+1.949i" (format "~8,3F" (sqrt -3.8)))

(expect " 32.00" (format "~6,2F" 32))

(expect "    32" (format "~6F" 32))

(expect "   32." (format "~6F" 32.)) ;; "  32.0" OK
;; NB: (not (and (exact? 32.) (integer? 32.)))

(expect "  3.2e46" (format "~8F" 32e45))

(expect " 3.2e-44" (format "~8F" 32e-45))

(expect "  3.2e21" (format "~8F" 32e20))

;;(expect "   3.2e6" (format "~8F" 32e5)) ;; ok.  converted in input to 3200000.0

(expect "   3200." (format "~8F" 32e2)) ;; "  3200.0" OK

(expect " 3.20e11" (format "~8,2F" 32e10))

(expect "      1.2345" (format "~12F" 1.2345))

(expect "        1.23" (format "~12,2F" 1.2345))

(expect "       1.234" (format "~12,3F" 1.2345))

(expect "        0.000+1.949i" (format "~20,3F" (sqrt -3.8)))

(expect "0.000+1.949i" (format "~8,3F" (sqrt -3.8)))

(expect " 3.46e11" (format "~8,2F" 3.4567e11))

; (expect "#1=(a b c . #1#)"
;         (format "~w" (let ( (c '(a b c)) ) (set-cdr! (cddr c) c) c)))

(expect "
"
        (format "~A~A~&" (list->string (list #\newline)) ""))

(expect "a new test"
        (format "~a ~? ~a" 'a "~s" '(new) 'test))

(expect "a new test, yes!"
        (format "~a ~?, ~a!" 'a "~s ~a" '(new test) 'yes))

(expect " 3.46e20" (format "~8,2F" 3.4567e20))

(expect " 3.46e21" (format "~8,2F" 3.4567e21))

(expect " 3.46e22" (format "~8,2F" 3.4567e22))

(expect " 3.46e23" (format "~8,2F" 3.4567e23))

(expect "   3.e24" (format "~8,0F" 3.4567e24))

(expect "  3.5e24" (format "~8,1F" 3.4567e24))

(expect " 3.46e24" (format "~8,2F" 3.4567e24))

(expect "3.457e24" (format "~8,3F" 3.4567e24))

(expect "   4.e24" (format "~8,0F" 3.5567e24))

(expect "  3.6e24" (format "~8,1F" 3.5567e24))

(expect " 3.56e24" (format "~8,2F" 3.5567e24))

(expect "       -0." (format "~10,0F" -3e-4))

(expect "      -0.0" (format "~10,1F" -3e-4))

(expect "     -0.00" (format "~10,2F" -3e-4))

(expect "    -0.000" (format "~10,3F" -3e-4))

(expect "   -0.0003" (format "~10,4F" -3e-4))

(expect "  -0.00030" (format "~10,5F" -3e-4))

(expect "     1.020" (format "~10,3F" 1.02))

(expect "     1.025" (format "~10,3F" 1.025))

(expect "     1.026" (format "~10,3F" 1.0256))

(expect "     1.002" (format "~10,3F" 1.002))

(expect "     1.002" (format "~10,3F" 1.0025))

(expect "     1.003" (format "~10,3F" 1.00256))

;;   ---   E O F   ---   ;;