anchor.diff:    (accum-after-time 0.2 2)
     (accum-after-time 0.1 4)
     (setf *after-time-millisec* (get-internal-real-time))
  -  (true-or-false? ___ (> (duration-ms) 500))
  -  (true-or-false? ___ (< (duration-ms) 700))
  -  (assert-equal *accum* ___))
  +  (true-or-false? t (> (duration-ms) 500))
  +  (true-or-false? t (< (duration-ms) 700))
  +  (assert-equal *accum* 7))
   
   (define-test test-run-in-parallel
       "same program as above, executed in threads.  Sleeps are simultaneous"
  
positive.code:   (sb-thread:join-thread (sb-thread:make-thread 'semaphore-increments-g :name "S incrementor 1"))
    (sb-thread:join-thread (sb-thread:make-thread 'semaphore-increments-g :name "S incrementor 2"))
    (sb-thread:join-thread (sb-thread:make-thread 'semaphore-increments-g :name "S incrementor 3"))
    (assert-equal ___ (sb-thread:semaphore-count *g-semaphore*)))
  
  
  ;; Semaphores can be used to manage resource allocation, and to trigger
  
negative.code:     "bindings are not inherited across threads"
    (let ((thread-ret-val (sb-thread:join-thread
                           (sb-thread:make-thread 'returns-v))))
      (assert-equal thread-ret-val 0))
    (let ((*v* "LEXICAL BOUND VALUE"))
      (assert-equal *v* "LEXICAL BOUND VALUE")
      (let ((thread-ret-val (sb-thread:join-thread
                             (sb-thread:make-thread 'returns-v))))
        (assert-equal thread-ret-val 0))))
  
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  