signedness fixes
[platform/upstream/gstreamer.git] / tests / benchmarks / mass-elements.scm
1 #!/bin/bash
2 # -*- scheme -*-
3 exec guile -s $0 "$@"
4 !#
5
6 ;; Quick hack to make some data files that gnuplot can read from
7 ;; mass-elements. Guile 1.6.
8
9 (use-modules (srfi srfi-13)
10              (srfi srfi-1)
11              (ice-9 optargs)
12              (ice-9 popen))
13
14 (define *phases* '(create set run destroy))
15
16 (define (read-lines port)
17   (let lp ((lines '()))
18     (let ((x (read-line port)))
19       (if (eof-object? x)
20           (begin
21             (close-port port)
22             (reverse! lines))
23           (lp (cons x lines))))))
24
25 (define (run-test n-identities)
26   (format #t "; running test: ~a\n" n-identities)
27   (let lp ((in (read-lines
28                 (open-input-pipe
29                  (format #f "./mass_elements ~A"
30                          (number->string n-identities)))))
31            (out '()))
32     (if (null? in)
33         (begin
34           (or (eq? (length out) 4) (error "Invalid mass_elements output"))
35           (map cons *phases* (reverse! out)))
36         (let ((line (car in)))
37           (if (eqv? (string-ref line 0) #\*)
38               (lp (cdr in) out)
39               (lp (cdr in)
40                   (cons (fold (lambda (x ret) (+ (* ret 60) x)) 0
41                               (map (lambda (x) (with-input-from-string x read))
42                                    (string-split line #\:)))
43                         out)))))))
44
45 (define (run-tests start stop step)
46   (let lp ((n start) (out '()))
47     (if (> n stop)
48         (reverse! out)
49         (lp (+ n step)
50             (acons n (run-test n) out)))))
51
52 (define (output-results results)
53   (let ((p (open-output-file "mass_elements.data")))
54     (display "#num_identities creation state-change run destroy\n" p)
55     (let lp ((in results))
56       (if (not (null? in))
57           (let* ((line (car in))
58                  (n (car line)))
59             (display n p)
60             (for-each
61              (lambda (t) (format p " ~a" t))
62              (map cdr (cdr line)))
63             (newline p)
64             (lp (cdr in)))))
65     (close-port p)))
66
67 (output-results
68  (apply run-tests (map string->number (cdr (program-arguments)))))