1:
2:
3:
4:
5:
6: (define (generate-fixnum-file file num)
7: (with-output-to-file file
8: (lambda ()
9: (dotimes (n num)
10:
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:
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:
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:
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:
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: