test-numformat.rkt
#lang racket/base

(require racket/port
         (planet neil/testeez:1:0)
         "numformat.rkt")

(testeez
 "test-numformat.rkt"

 (test-define ""
              f
              (lambda (proc arg)
                (with-output-to-string
                  (lambda ()
                    (proc arg)))))

 (test/equal ""
             (f display-number/us-style -987654321.69696969)
             "-987,654,321.6969697")

 (test/equal ""
             (f display-number/european-style -987654321.69696969)
             "-987'654'321,6969697")

 (test-define ""
              display-number-with-plus-minus-and-min-1-frac
              (make-number-displayer
               '((sign                  plus-minus)
                 (pad-fractional-length 1))))

 (test/equal ""
             (f display-number-with-plus-minus-and-min-1-frac -1)
             "-1.0")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-1-frac 0)
             "0.0")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-1-frac 1)
             "+1.0")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-1-frac -1.0)
             "-1.0")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-1-frac 0.0)
             "0.0")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-1-frac 1.0)
             "+1.0")

(test-define ""
              display-number-with-plus-minus-and-min-0-frac
              (make-number-displayer
               '((sign                  plus-minus)
                 (pad-fractional-length #f))))

 (test/equal ""
             (f display-number-with-plus-minus-and-min-0-frac -1)
             "-1")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-0-frac 0)
             "0")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-0-frac 1)
             "+1")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-0-frac -1.0)
             "-1")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-0-frac 0.0)
             "0")

 (test/equal ""
             (f display-number-with-plus-minus-and-min-0-frac 1.0)
             "+1")

 (test-define ""
              display-dollars-and-cents
              (make-number-displayer
               '((sign                   parens)
                 (prefix                 "$")
                 (pad-whole-char         #f)
                 (pad-whole-length       #f)
                 (whole-spacers-char     #\,)
                 (whole-spacers-interval 3)
                 (decimal-point          #\.)
                 (max-fractional-length  2)
                 (pad-fractional-char    #\0)
                 (pad-fractional-length  2)
                 (suffix                 #f))))

 (test/equal ""
             (f display-dollars-and-cents -987654321.69696969)
             "($987,654,321.69)")

 (test/equal ""
             (f display-dollars-and-cents -69.01)
             "($69.01)")

 (test/equal ""
             (f display-dollars-and-cents -69.1)
             "($69.10)")

 (test/equal ""
             (f display-dollars-and-cents 69)
             "$69.00"))