diff --git a/syndicate/syntax.rkt b/syndicate/syntax.rkt index 6305bb5..3da4f40 100644 --- a/syndicate/syntax.rkt +++ b/syndicate/syntax.rkt @@ -612,6 +612,32 @@ ) (lambda () + ;; Goal: no matter the circumstances (e.g. exception in a + ;; stop script), we will never retract an assertion more or + ;; fewer than the correct number of times. + + ;; Test cleanup after exception in stop script + ;; + ;; Correct output: + ;; + ;; inner gone + ;; outer gone + ;; middle gone + ;; + ;; (or some permutation of these) plus an exception report for the division by zero. + + (assertion-struct layer (name)) + + (spawn (define root-facet (current-facet)) + (assert (layer 'outer)) + (on-start (react (assert (layer 'middle)) + (on-start (flush!) (flush!) (stop-facet root-facet)) + (on-stop (/ 1 0)) + (on-start (react (assert (layer 'inner))))))) + + (spawn (on (retracted (layer $x)) (printf "~a gone\n" x)))) + + #;(lambda () (spawn #:name 'factory-1 (on (asserted (list 'X 1)) (spawn #:name 'service-1