gstreamer/tests/bench-mass_elements.scm
Andy Wingo bffcaf6e70 tests/mass_elements.gnuplot: gnuplot file for the mass_elements benchmark. Run as gnuplot mass_elements.gnuplot > foo...
Original commit message from CVS:
2005-02-24  Andy Wingo  <wingo@pobox.com>

* tests/mass_elements.gnuplot: gnuplot file for the mass_elements
benchmark. Run as gnuplot mass_elements.gnuplot > foo.ps, after
running bench-mass_elements.scm.

* tests/bench-mass_elements.scm: New script, runs mass_elements
for various numbers of identities, outputting the results to a
file. Requires guile 1.6. Just for testing.
2005-02-24 12:31:12 +00:00

68 lines
2 KiB
Scheme
Executable file

#!/bin/bash
# -*- scheme -*-
exec guile -s $0 "$@"
!#
;; Quick hack to make some data files that gnuplot can read from
;; mass-elements. Guile 1.6.
(use-modules (srfi srfi-13)
(srfi srfi-1)
(ice-9 optargs)
(ice-9 popen))
(define *phases* '(create set run destroy))
(define (read-lines port)
(let lp ((lines '()))
(let ((x (read-line port)))
(if (eof-object? x)
(begin
(close-port port)
(reverse! lines))
(lp (cons x lines))))))
(define (run-test n-identities)
(format #t "; running test: ~a\n" n-identities)
(let lp ((in (read-lines
(open-input-pipe
(format #f "./mass_elements ~A"
(number->string n-identities)))))
(out '()))
(if (null? in)
(begin
(or (eq? (length out) 4) (error "Invalid mass_elements output"))
(map cons *phases* (reverse! out)))
(let ((line (car in)))
(if (eqv? (string-ref line 0) #\*)
(lp (cdr in) out)
(lp (cdr in)
(cons (fold (lambda (x ret) (+ (* ret 60) x)) 0
(map (lambda (x) (with-input-from-string x read))
(string-split line #\:)))
out)))))))
(define (run-tests start stop step)
(let lp ((n start) (out '()))
(if (> n stop)
(reverse! out)
(lp (+ n step)
(acons n (run-test n) out)))))
(define (output-results results)
(let ((p (open-output-file "mass_elements.data")))
(display "#num_identities creation state-change run destroy\n" p)
(let lp ((in results))
(if (not (null? in))
(let* ((line (car in))
(n (car line)))
(display n p)
(for-each
(lambda (t) (format p " ~a" t))
(map cdr (cdr line)))
(newline p)
(lp (cdr in)))))
(close-port p)))
(output-results
(apply run-tests (map string->number (cdr (program-arguments)))))