#lang racket/base
(require (planet williams/simulation/simulation-with-graphics))
(define tallied #f)
(define accumulated #f)
(define-process (test-process value-duration-list)
(for ((vdl (in-list value-duration-list)))
(let ((value (car vdl))
(duration (cadr vdl)))
(set-variable-value! tallied value)
(set-variable-value! accumulated value)
(wait duration))))
(define (main value-duration-list)
(with-new-simulation-environment
(set! tallied (make-variable))
(tally (variable-statistics tallied))
(tally (variable-history tallied))
(set! accumulated (make-variable))
(accumulate (variable-statistics accumulated))
(accumulate (variable-history accumulated))
(schedule #:at 0.0 (test-process value-duration-list))
(start-simulation)
(printf "--- Test Tally and Accumulate ---~n")
(printf "~n--- Tally ---~n")
(printf "N = ~a~n" (variable-n tallied))
(printf "Sum = ~a~n" (variable-sum tallied))
(printf "Mean = ~a~n" (variable-mean tallied))
(printf "~a~n" (history-plot (variable-history tallied)))
(printf "~n--- Accumulate ---~n")
(printf "N = ~a~n" (variable-n accumulated))
(printf "Sum = ~a~n" (variable-sum accumulated))
(printf "Mean = ~a~n" (variable-mean accumulated))
(printf "~a~n" (history-plot (variable-history accumulated)))))
(main '((1 2)(2 1)(3 2)(4 3)))