#lang racket/base (require "ordered-rpc.rkt") (require rackunit) (let ((tm0 (make-transaction-manager))) (define-values (t1 tm1) (open-transaction tm0 'a)) (define-values (t2 tm2) (open-transaction tm1 'b)) (define-values (t3 tm3) (open-transaction tm2 'c)) (check-equal? (transaction-available? tm3) #f) (close-transaction! t2 'second) (check-equal? (transaction-available? tm3) #f) (close-transaction! t1 'first) (check-equal? (transaction-available? tm3) #t) (define-values (v1 tm4) (dequeue-transaction tm3)) (check-equal? (transaction-context v1) 'a) (check-equal? (transaction-value v1) 'first) (check-equal? (transaction-available? tm4) #t) (define-values (v2 tm5) (dequeue-transaction tm4)) (check-equal? (transaction-available? tm5) #f) (close-transaction! t3 'third) (check-equal? (transaction-available? tm5) #t) (define-values (v3 tm6) (dequeue-transaction tm5)) (check-equal? (transaction-available? tm6) #f) )