(linenum→info "unix/slp.c:2238")

gauche/0.8.12/test/number-xtra.scm

    1: ;;
    2: ;; Extra test for number reading/writing
    3: ;;
    4: 
    5: ;; Generate test file.
    6: (define (generate-fixnum-file file num)
    7:   (with-output-to-file file
    8:     (lambda ()
    9:       (dotimes (n num)
   10: ;        (display (modulo (sys-random) #x20000000))
   11:         (display (sys-random))
   12:         (newline)))))
   13: 
   14: (define (generate-bignum-file file num)
   15:   (with-output-to-file file
   16:     (lambda ()
   17:       (dotimes (n num)
   18:         (let ((k (+ (* RAND_MAX RAND_MAX (sys-random))
   19:                     (* RAND_MAX (sys-random))
   20:                     (sys-random))))
   21:           (display k) (newline))))))
   22: 
   23: (define (generate-flonum-file file num)
   24:   (with-output-to-file file
   25:     (lambda ()
   26:       (dotimes (n num)
   27:         (let* ((m (/ (sys-random) RAND_MAX))
   28:                (e (inexact->exact (floor (* (/ (sys-random) RAND_MAX) 1023))))
   29:                (s (if (odd? (sys-random)) -1 1))
   30:                (f (ldexp m (* s e))))
   31:           (display f) (newline))))))
   32: 
   33: ;; Benchmarking readers
   34: (define (test-reader file repeat)
   35:   (let ((input (call-with-input-file file port->string-list)))
   36:     (receive (sec0 usec0) (sys-gettimeofday)
   37:       (dotimes (n repeat)
   38:         (for-each string->number input))
   39:       (receive (sec1 usec1) (sys-gettimeofday)
   40:         (- (+ (* sec1 1000000) usec1)
   41:            (+ (* sec0 1000000) usec0))))))
   42: 
   43: ;; Benchmarking writers
   44: (define (test-writer file repeat)
   45:   (let ((input (call-with-input-file file port->sexp-list)))
   46:     (receive (sec0 usec0) (sys-gettimeofday)
   47:       (dotimes (n repeat)
   48:         (for-each number->string input))
   49:       (receive (sec1 usec1) (sys-gettimeofday)
   50:         (- (+ (* sec1 1000000) usec1)
   51:            (+ (* sec0 1000000) usec0))))))
   52: 
   53: ;; test writer-reader invariance
   54: (define (test-writer-reader-invariance file)
   55:   (with-input-from-file file
   56:     (lambda ()
   57:       (port-for-each (lambda (input)
   58:                        (let* ((num (string->number input))
   59:                               (num2 (string->number (number->string num))))
   60:                          (unless (eqv? num num2)
   61:                            (print #`"ERROR: ,num and ,num2 (original ,input)"))))
   62:                      read-line))))
   63: 
   64: 
   65: ;; benchmarking bignum arithmetic
   66: (define (test-bignum-arith file repeat)
   67:   (let ((input (call-with-input-file file port->sexp-list)))
   68:     (receive (sec0 usec0) (sys-gettimeofday)
   69:       (dotimes (i repeat)
   70:         (for-each (lambda (x) (- (* (+ x x) x) x))
   71:                   input))
   72:       (receive (sec1 usec1) (sys-gettimeofday)
   73:         (- (+ (* sec1 1000000) usec1)
   74:            (+ (* sec0 1000000) usec0))))))
   75: 
Syntax (Markdown)