31 lines
969 B
Racket
31 lines
969 B
Racket
#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)
|
|
)
|