;; Copyright 2006-2017, Matthew Welland.
;;
;; This file is part of Megatest.
;;
;; Megatest is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; Megatest 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 General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with Megatest. If not, see <http://www.gnu.org/licenses/>.
;;
(use srfi-69)
(define (runs:queue-next-hed tal reg n regful)
(if regful
(car reg)
(car tal)))
(define (runs:queue-next-tal tal reg n regful)
(if regful
tal
(let ((newtal (cdr tal)))
(if (null? newtal)
reg
newtal
))))
(define (runs:queue-next-reg tal reg n regful)
(if regful
(cdr reg)
(if (eq? (length tal) 1)
'()
reg)))
(use trace)
(trace runs:queue-next-hed
runs:queue-next-tal
runs:queue-next-reg)
(define tests '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20))
(define test-registry (make-hash-table))
(define n 3)
(let loop ((hed (car tests))
(tal (cdr tests))
(reg '()))
(let* ((reglen (length reg))
(regful (> reglen n)))
(print "hed=" hed ", length reg=" (length reg) ", (> lenreg n)=" (> (length reg) n))
(let ((newtal (append tal (list hed)))) ;; used if we are not done with this test
(cond
((not (hash-table-ref/default test-registry hed #f))
(hash-table-set! test-registry hed #t)
(print "Registering #" hed)
(if (not (null? tal))
(loop (runs:queue-next-hed tal reg n regful)
(runs:queue-next-tal tal reg n regful)
(let ((newl (append reg (list hed))))
(if regful
(cdr newl)
newl)))))
(else
(print "Running #" hed)
(if (not (null? tal))
(loop (runs:queue-next-hed tal reg n regful)
(runs:queue-next-tal tal reg n regful)
(runs:queue-next-reg tal reg n regful))))))))