@@ -762,48 +762,43 @@ tcfg)) ;; sort tests by priority and waiton ;; Move test specific stuff to a test unit FIXME one of these days (define (tests:sort-by-priority-and-waiton test-records) - (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)))) - (sort - (hash-table-keys test-records) ;; avoid dealing with deleted tests, look at the hash table - (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-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))) - ;; (debug:print 5 "sort-by-priority-and-waiton, a: " a " b: " b - ;; "\n a-record: " a-record - ;; "\n b-record: " b-record - ;; "\n a-waitons: " a-waitons - ;; "\n b-waitons: " b-waitons - ;; "\n a-config: " (hash-table->alist a-config) - ;; "\n b-config: " (hash-table->alist b-config) - ;; "\n a-raw-pri: " a-raw-pri - ;; "\n b-raw-pri: " b-raw-pri - ;; "\n a-priority: " a-priority - ;; "\n b-priority: " b-priority) - (tests:testqueue-set-priority! a-record a-priority) - (tests:testqueue-set-priority! b-record b-priority) - (if (and a-waitons (member (tests:testqueue-get-testname b-record) a-waitons)) - #f ;; cannot have a which is waiting on b happening before b - (if (and b-waitons (member (tests:testqueue-get-testname a-record) b-waitons)) - #t ;; this is the correct order, b is waiting on a and b is before a - (if (> a-priority b-priority) - #t ;; if a is a higher priority than b then we are good to go - (string-compare3 a b))))))))) + (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))) + (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-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))))) + (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 ;; for each test: ;; (define (tests:filter-non-runnable run-id testkeynames testrecordshash) (let ((runnables '()))