racket-ssh-2012/test-standard-thread.rkt

31 lines
812 B
Racket

#lang racket/base
(require "standard-thread.rkt")
(require "conversation.rkt")
(require racket/set)
(require racket/match)
(require racket/class)
(define r (make-room))
(define t1 (standard-thread (lambda ()
(define h (join-room r))
(error 'omg "t1 exiting"))))
(define t2 (standard-thread (lambda ()
(define h (join-room r))
(+ 1 2))))
(define t3 (standard-thread (lambda ()
(define h (join-room r))
(send h depart 'here-is-my-reason))))
(define h (join-room r))
(let loop ((seen (set)) (count 0))
(define m (send h listen))
(write m)
(newline)
(match m
((arrived who) (loop (set-add seen who) (+ count 1)))
((departed _ _) (if (and (= count 1) (= (set-count seen) 3))
'done
(loop seen (- count 1))))
(else (loop seen count))))