File: rnrs-benchmarks.ss

package info (click to toggle)
ikarus 0.0.3%2Bbzr.2010.01.26-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 39,868 kB
  • ctags: 9,284
  • sloc: lisp: 47,954; ansic: 13,247; sh: 4,595; java: 641; asm: 366; makefile: 264; awk: 186; perl: 66
file content (206 lines) | stat: -rw-r--r-- 5,593 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
;;; Ikarus Scheme -- A compiler for R6RS Scheme.
;;; Copyright (C) 2006,2007,2008  Abdulaziz Ghuloum
;;; 
;;; This program is free software: you can redistribute it and/or modify
;;; it under the terms of the GNU General Public License version 3 as
;;; published by the Free Software Foundation.
;;; 
;;; This program is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;;; General Public License for more details.
;;; 
;;; You should have received a copy of the GNU General Public License
;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.


(library (rnrs-benchmarks)
  (export run-benchmark fatal-error include-source 
    call-with-output-file/truncate fast-run
     ack-iters 
     array1-iters
     bibfreq-iters
     boyer-iters
     browse-iters
     cat-iters
     compiler-iters
     conform-iters
     cpstak-iters
     ctak-iters
     dderiv-iters
     deriv-iters
     destruc-iters
     diviter-iters
     divrec-iters
     dynamic-iters
     earley-iters
     fft-iters
     fib-iters
     fibc-iters
     fibfp-iters
     fpsum-iters
     gcbench-iters
     gcold-iters
     graphs-iters
     lattice-iters
     matrix-iters
     maze-iters
     mazefun-iters
     mbrot-iters
     nbody-iters
     nboyer-iters
     nqueens-iters
     ntakl-iters
     nucleic-iters
     takl-iters
     paraffins-iters
     parsing-iters
     perm9-iters
     pnpoly-iters
     peval-iters
     pi-iters
     primes-iters
     puzzle-iters
     quicksort-iters
     ray-iters
     sboyer-iters
     scheme-iters
     simplex-iters
     slatex-iters
     sum-iters
     sum1-iters
     string-iters
     sumfp-iters
     sumloop-iters
     tail-iters
     tak-iters
     trav1-iters
     trav2-iters
     triangl-iters
     wc-iters)

  (import (ikarus))

  (define call-with-output-file/truncate
    (lambda (file-name proc)
      (let ([p (open-file-output-port 
                 file-name 
                 (file-options no-fail)
                 'block
                 (native-transcoder))])
        (call-with-port p proc))))

  (define-syntax include-source
    (lambda (x)
      (syntax-case x ()
        [(ctxt name) 
         (cons #'begin
           (with-input-from-file 
             (format "rnrs-benchmarks/~a" (syntax->datum #'name))
             (lambda ()
               (let f ()
                 (let ([x (read)])
                   (cond
                     [(eof-object? x) '()]
                     [else 
                      (cons (datum->syntax #'ctxt x) (f))]))))))])))

  (define (fatal-error . args)
    (error 'fatal-error "~a"
      (apply (lambda (x) (format "~a" x)) args)))

  (define fast-run (make-parameter #f))
  
  (define (run-bench count run)
    (import (ikarus system $fx))
    (unless ($fx= count 0)
      (let f ([count ($fx- count 1)] [run run])
        (cond
          [($fx= count 0) (run)]
          [else 
           (begin (run) (f ($fx- count 1) run))]))))

  (define (run-benchmark name count ok? run-maker . args)
    (let ([run (apply run-maker args)])
      (let ([result 
             (time-it (format "~a (~a)" name count)
               (if (fast-run) 
                   run
                   (lambda () (run-bench count run))))])
        (unless (ok? result) 
          (error #f "*** wrong result ***")))))


  ; Gabriel benchmarks
  (define boyer-iters        50)
  (define browse-iters      600)
  (define cpstak-iters     1700)
  (define ctak-iters        160)
  (define dderiv-iters  3000000)
  (define deriv-iters   4000000)
  (define destruc-iters     800)
  (define diviter-iters 1200000)
  (define divrec-iters  1200000)
  (define puzzle-iters      180)
  (define tak-iters        3000)
  (define takl-iters        500)
  (define trav1-iters       150)
  (define trav2-iters        40)
  (define triangl-iters      12)
  ; Kernighan and Van Wyk benchmarks
  (define ack-iters           20)
  (define array1-iters        2)
  (define cat-iters           12)
  (define string-iters        4)
  (define sum1-iters          5)
  (define sumloop-iters       2)
  (define tail-iters          4)
  (define wc-iters           15)
  
  ; C benchmarks
  (define fft-iters        4000)
  (define fib-iters           6)
  (define fibfp-iters         2)
  (define mbrot-iters       120)
  (define nucleic-iters      12)
  (define pnpoly-iters   140000)
  (define sum-iters       30000)
  (define sumfp-iters      8000)
  (define tfib-iters         20)
  
  ; Other benchmarks
  (define conform-iters      70)
  (define dynamic-iters      70)
  (define earley-iters      400)
  (define fibc-iters        900)
  (define graphs-iters      500)
  (define lattice-iters       2)
  (define matrix-iters      600)
  (define maze-iters       4000)
  (define mazefun-iters    2500)
  (define nqueens-iters    4000)
  (define ntakl-iters       600)
  (define paraffins-iters  1800)
  (define peval-iters       400)
  (define pi-iters            3)
  (define primes-iters   180000)
  (define ray-iters           5)
  (define scheme-iters    40000)
  (define simplex-iters  160000)
  (define slatex-iters       30)
  (define perm9-iters        12)
  (define nboyer-iters      150)
  (define sboyer-iters      200)
  (define gcbench-iters       2)
  (define compiler-iters    500)

  ; New benchmarks
  (define parsing-iters    360)
  (define gcold-iters      600)

  (define quicksort-iters 60)
  (define fpsum-iters 60)
  (define nbody-iters         1)
  (define bibfreq-iters 2)
)