Index: dcommon.scm ================================================================== --- dcommon.scm +++ dcommon.scm @@ -595,14 +595,20 @@ (test-box-center-y (vector-ref test-box-center 1)) (waiton-center-x (vector-ref waiton-center 0)) (waiton-center-y (vector-ref waiton-center 1)) (delta-y (- waiton-center-y test-box-center-y)) (delta-x (- waiton-center-x test-box-center-x)) - (use-delta-x (> (abs delta-x)(abs delta-y))) ;; use the larger one + (abs-delta-x (abs delta-x)) + (abs-delta-y (abs delta-y)) + (use-delta-x (> abs-delta-x abs-delta-y)) ;; use the larger one (delta-ratio (if use-delta-x - (/ (abs delta-y)(abs delta-x)) - (/ (abs delta-x)(abs delta-y)))) + (if (> abs-delta-x 0) + (/ abs-delta-y abs-delta-x) + 1) + (if (> abs-delta-y 0) + (/ abs-delta-x abs-delta-y) + 1))) (x-adj (if use-delta-x 8 (* delta-ratio 8))) (y-adj (if use-delta-x (* x-adj delta-ratio) Index: tests.scm ================================================================== --- tests.scm +++ tests.scm @@ -767,38 +767,65 @@ (let* ((mungepriority (lambda (priority) (if priority (let ((tmp (any->number priority))) (if tmp tmp (begin (debug:print 0 "ERROR: bad priority value " priority ", using 0") 0))) 0))) + (all-tests (hash-table-keys test-records)) + (all-waited-on (let loop ((hed (car all-tests)) + (tal (cdr all-tests)) + (res '())) + (let* ((trec (hash-table-ref test-records hed)) + (waitons (or (tests:testqueue-get-waitons trec) '()))) + (if (null? tal) + (append res waitons) + (loop (car tal)(cdr tal)(append res waitons)))))) (sort-fn1 (lambda (a b) (let* ((a-record (hash-table-ref test-records a)) (b-record (hash-table-ref test-records b)) - (a-waitons (tests:testqueue-get-waitons a-record)) - (b-waitons (tests:testqueue-get-waitons b-record)) + (a-waitons (or (tests:testqueue-get-waitons a-record) '())) + (b-waitons (or (tests:testqueue-get-waitons b-record) '())) (a-config (tests:testqueue-get-testconfig a-record)) (b-config (tests:testqueue-get-testconfig b-record)) (a-raw-pri (config-lookup a-config "requirements" "priority")) (b-raw-pri (config-lookup b-config "requirements" "priority")) (a-priority (mungepriority a-raw-pri)) (b-priority (mungepriority b-raw-pri))) (tests:testqueue-set-priority! a-record a-priority) (tests:testqueue-set-priority! b-record b-priority) - (or (and b-waitons (member (tests:testqueue-get-testname a-record) b-waitons)) - (not b-waitons))))) + (debug:print 0 "a=" a ", b=" b ", a-waitons=" a-waitons ", b-waitons=" b-waitons) + (cond + ;; is + ((member a b-waitons) ;; is b waiting on a? + (debug:print 0 "case1") + #t) + ((member b a-waitons) ;; is a waiting on b? + (debug:print 0 "case2") + #f) + ((and (not (null? a-waitons)) ;; both have waitons - do not disturb + (not (null? b-waitons))) + (debug:print 0 "case2.1") + #t) + ((and (null? a-waitons) ;; no waitons for a but b has waitons + (not (null? b-waitons))) + (debug:print 0 "case3") + #f) + ((and (not (null? a-waitons)) ;; a has waitons but b does not + (null? b-waitons)) + (debug:print 0 "case4") + #t) + ((not (eq? a-priority b-priority)) ;; use + (> a-priority b-priority)) + (else + (debug:print 0 "case5") + (string>? a b)))))) + (sort-fn2 (lambda (a b) (> (mungepriority (tests:testqueue-get-priority (hash-table-ref test-records a))) (mungepriority (tests:testqueue-get-priority (hash-table-ref test-records b))))))) - (sort - (sort - (sort - (sort (hash-table-keys test-records) ;; avoid dealing with deleted tests, look at the hash table - sort-fn1) ;; first once by waiton - sort-fn2) ;; second by priority - sort-fn1) - sort-fn1))) ;; third by waiton again + (sort all-tests sort-fn1))) ;; avoid dealing with deleted tests, look at the hash table ;; for each test: ;; (define (tests:filter-non-runnable run-id testkeynames testrecordshash) (let ((runnables '()))