diff options
Diffstat (limited to 'benchmarks/benchmark.scm')
-rw-r--r-- | benchmarks/benchmark.scm | 93 |
1 files changed, 46 insertions, 47 deletions
diff --git a/benchmarks/benchmark.scm b/benchmarks/benchmark.scm index fd5f7e7..927fe15 100644 --- a/benchmarks/benchmark.scm +++ b/benchmarks/benchmark.scm @@ -157,55 +157,54 @@ (print "# Benchmark run for " impl) (print "# set size\trun time(ms)") -(let lp1 ((size (or requested-size 10)) - (start-time (current-process-milliseconds))) +(let lp1 ((size (or requested-size 10))) (define lst1 (list-tabulate size (lambda (i) (string->symbol (conc "x" i))))) (define lst2 (list-tabulate size (lambda (i) (string->symbol (conc "y" i))))) - (let lp2 ((i 10000)) - (case impl - ((lset) - (lset-difference eq? lst1 lst2)) - ((slset) - (slset-difference lst1 lst2)) - ((symbolset cached-symbolset) - (when (eq? impl 'cached-symbolset) - (set! symbol-cache? #t)) - (symbolset-difference lst1 lst2)) - ((hash-table cached-hash-table) - (when (pair? lst1) - (when (eq? impl 'cached-hash-table) + (let ((start-time (current-process-milliseconds))) + (let lp2 ((i 10000)) + (case impl + ((lset) + (lset-difference eq? lst1 lst2)) + ((slset) + (slset-difference lst1 lst2)) + ((symbolset cached-symbolset) + (when (eq? impl 'cached-symbolset) (set! symbol-cache? #t)) - (let ((ht1 (make-my-hash-table size)) - (ht2 (make-my-hash-table size))) - (begin - (for-each (lambda (x) (my-hash-table-set! ht1 x #t)) lst1) - (for-each (lambda (x) (my-hash-table-set! ht2 x #t)) lst2) + (symbolset-difference lst1 lst2)) + ((hash-table cached-hash-table) + (when (pair? lst1) + (when (eq? impl 'cached-hash-table) + (set! symbol-cache? #t)) + (let ((ht1 (make-my-hash-table size)) + (ht2 (make-my-hash-table size))) + (begin + (for-each (lambda (x) (my-hash-table-set! ht1 x #t)) lst1) + (for-each (lambda (x) (my-hash-table-set! ht2 x #t)) lst2) + (set! lst1 ht1) + (set! lst2 ht2)))) + (my-hash-table-difference lst1 lst2)) + ((srfi-69 cached-srfi-69) + (when (pair? lst1) + (when (eq? impl 'cached-srfi-69) + (set! symbol-cache? #t)) + (let ((ht1 (make-hash-table eq? (if (eq? impl 'cached-srfi-69) hash-symbol symbol-hash) size)) + (ht2 (make-hash-table eq? (if (eq? impl 'cached-srfi-69) hash-symbol symbol-hash) size))) + (for-each (lambda (x) (hash-table-set! ht1 x #t)) lst1) + (for-each (lambda (x) (hash-table-set! ht2 x #t)) lst2) (set! lst1 ht1) - (set! lst2 ht2)))) - (my-hash-table-difference lst1 lst2)) - ((srfi-69 cached-srfi-69) - (when (pair? lst1) - (when (eq? impl 'cached-srfi-69) - (set! symbol-cache? #t)) - (let ((ht1 (make-hash-table eq? (if (eq? impl 'cached-srfi-69) hash-symbol symbol-hash) size)) - (ht2 (make-hash-table eq? (if (eq? impl 'cached-srfi-69) hash-symbol symbol-hash) size))) - (for-each (lambda (x) (hash-table-set! ht1 x #t)) lst1) - (for-each (lambda (x) (hash-table-set! ht2 x #t)) lst2) - (set! lst1 ht1) - (set! lst2 ht2))) - (srfi-69-hash-table-difference lst1 lst2)) - (else (error "Unknown impl" impl))) - (unless (zero? i) - (lp2 (sub1 i)))) - - (let* ((end-time (current-process-milliseconds)) - (total-ms (- end-time start-time))) - (print size "\t" total-ms) - (flush-output) - ;; Run up to 10s, or a set size of 3000, whichever comes first - (unless (or requested-size - (> total-ms 10000) - (> size 3000)) - (lp1 (+ size 100) - (current-process-milliseconds))))) + (set! lst2 ht2))) + (srfi-69-hash-table-difference lst1 lst2)) + (else (error "Unknown impl" impl))) + (unless (zero? i) + (lp2 (sub1 i)))) + + (let* ((end-time (current-process-milliseconds)) + (total-ms (- end-time start-time))) + (print size "\t" total-ms) + (flush-output) + ;; Run up to 10s, or a set size of 3000, whichever comes first + (unless (or requested-size + (> total-ms 10000) + (> size 3000)) + (lp1 (+ size 100)))))) |