(colors-left colors))
(if (null? progs-left)
entries
- (let ((this-prog (car progs-left))
- (this-col (car colors-left)))
- (loop (cons (cons (prog-name this-prog) this-col) entries)
- (cdr progs-left)
- (cdr colors-left))))))
+ (if (null? colors-left)
+ (error "Not enough colours in colour map!")
+ (let ((this-prog (car progs-left))
+ (this-col (car colors-left)))
+ (loop (cons (cons (prog-name this-prog) this-col) entries)
+ (cdr progs-left)
+ (cdr colors-left)))))))
-(define (mars-runner files iters core-size visualization)
+(define (mars-runner files iters core-size visualization min-queue-count)
(print "Iters: " iters ", core size: " core-size)
(let* ((progs (map
(lambda (fname)
(let* ((colors '("red" "blue" "green" "magenta" "cyan"))
(color-map (make-color-map progs colors))
(vis (make-vis 640 480 core-size color-map)))
- (make-core 8000 (lambda (i n)
- (vis 'update-owner i n))))
- (make-core 8000)))
- (queues (run-mars core (install-progs core progs) iters)))
- (for-each (lambda (q)
- (print)
- (print "Final queue for " (queue-owner q) ":")
- (dump-queue q core))
- queues)
+ (make-core core-size (lambda (i n)
+ (vis 'update-owner i n))))
+ (make-core core-size)))
+ (queues (run-mars core (install-progs core progs) iters min-queue-count)))
+ (dump-queues queues core)
(when visualization
(print* "Press enter to finish...")
(read-line))))
(print "Usage: run-mars [-h|--help]\n"
" run-mars [-c|--core size]\n"
" [-i|--iterations iters]\n"
- " [-n|--no-visualization]\n"
+ " [-v|--visualization]\n"
+ " [-m|--min-queue-count]\n"
" warrior1.red [warrior2.red [...]]"))
(define (main)
(let loop ((args (cdr (argv)))
(iters 10000)
(core-size 8000)
- (visualization #t))
+ (visualization #f)
+ (min-queue-count 2))
(match args
((or () ((or "-h" "--help")))
(print-usage))
(((or "-i" "--iterations") istr rest ...)
- (loop rest (string->number istr) core-size visualization))
+ (loop rest (string->number istr) core-size visualization min-queue-count))
(((or "-c" "--core-size") cstr rest ...)
- (loop rest iters (string->number cstr) visualization))
- (((or "-n" "--no-visualization") rest ...)
- (loop rest iters core-size #f))
+ (loop rest iters (string->number cstr) visualization min-queue-count))
+ (((or "-v" "--visualization") rest ...)
+ (loop rest iters core-size #t min-queue-count))
+ (((or "-m" "--min-queue-count") mstr rest ...)
+ (loop rest iters core-size visualization (string->number mstr)))
((files ...)
- (mars-runner files iters core-size visualization)))))
+ (mars-runner files iters core-size visualization min-queue-count)))))
+
(main)