(asdf:defsystem :sb-concurrency
:components ((:file "package")
+ (:file "frlock" :depends-on ("package"))
(:file "queue" :depends-on ("package"))
- (:file "mailbox" :depends-on ("package" "queue"))))
+ (:file "mailbox" :depends-on ("package" "queue"))
+ (:file "gate" :depends-on ("package"))))
(asdf:defsystem :sb-concurrency-tests
:depends-on (:sb-concurrency :sb-rt)
:components
((:file "package")
(:file "test-utils" :depends-on ("package"))
+ (:file "test-frlock" :depends-on ("package" "test-utils"))
(:file "test-queue" :depends-on ("package" "test-utils"))
- (:file "test-mailbox" :depends-on ("package" "test-utils"))))))
+ (:file "test-mailbox" :depends-on ("package" "test-utils"))
+ (:file "test-gate" :depends-on ("package" "test-utils"))))))
(defmethod asdf:perform :after ((o asdf:load-op)
(c (eql (asdf:find-system :sb-concurrency))))
(defmethod asdf:perform ((o asdf:test-op)
(c (eql (asdf:find-system :sb-concurrency-tests))))
- (or (funcall (intern "DO-TESTS" (find-package "SB-RT")))
- (error "~S failed" 'asdf:test-op)))
+ (multiple-value-bind (soft strict pending)
+ (funcall (intern "DO-TESTS" (find-package "SB-RT")))
+ (fresh-line)
+ (unless strict
+ #+sb-testing-contrib
+ ;; We create TEST-PASSED from a shell script if tests passed. But
+ ;; since the shell script only `touch'es it, we can actually create
+ ;; it ahead of time -- as long as we're certain that tests truly
+ ;; passed, hence the check for SOFT.
+ (when soft
+ (with-open-file (s #p"SYS:CONTRIB;SB-CONCURRENCY;TEST-PASSED"
+ :direction :output)
+ (dolist (pend pending)
+ (format s "Expected failure: ~A~%" pend))))
+ (warn "ignoring expected failures in test-op"))
+ (unless soft
+ (error "test-op failed with unexpected failures"))))