| #!/bin/bash |
| # -*- scheme -*- |
| exec guile -s $0 "$@" |
| !# |
| |
| ;; Copyright (C) 2005 Andy Wingo |
| ;; |
| ;; This library is free software; you can redistribute it and/or |
| ;; modify it under the terms of the GNU Lesser General Public |
| ;; License as published by the Free Software Foundation; either |
| ;; version 2.1 of the License, or (at your option) any later version. |
| ;; |
| ;; This library 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 |
| ;; Lesser General Public License for more details. |
| ;; |
| ;; You should have received a copy of the GNU Lesser General Public |
| ;; License along with this library; if not, write to the Free Software |
| ;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| |
| ;; 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))))) |