#lang syndicate ;; Illustrates a (fixed) bug where an endpoint whose interest moves ;; with time, where that interest eventually overlaps with existing ;; interest, fails to be notified of an otherwise-known assertion. ;; ;; Symptomatic output: ;; ;; Outer value 4 = 4 ;; Value 0 = 0 ;; Value 1 = 1 ;; Value 2 = 2 ;; Value 3 = 3 ;; ;; Correct output: ;; ;; Outer value 4 = 4 ;; Value 0 = 0 ;; Value 1 = 1 ;; Value 2 = 2 ;; Value 3 = 3 ;; Value 4 = 4 ;; Value 5 = 5 (spawn (field [of-interest 0]) (during 'ready (on (asserted (list (of-interest) $v)) (printf "Value ~a = ~a\n" (of-interest) v) (of-interest (+ (of-interest) 1)))) (on (asserted (list 4 $v)) (printf "Outer value ~a = ~a\n" 4 v))) (spawn (assert (list 0 0)) (assert (list 1 1)) (assert (list 2 2)) (assert (list 3 3)) (assert (list 4 4)) (assert (list 5 5)) (on-start (flush!) (assert! 'ready)))