#lang racket (require syndicate/trie syndicate/tset) (define N-PATTERNS 10000) (define N-MESSAGES 1000000) (struct tuple (a b) #:prefab) (define (pat n) (pattern->trie (datum-tset n) (tuple n ?))) (define pats (time (for/fold [(p trie-empty)] [(n (in-range N-PATTERNS))] (trie-union p (pat n))))) ;; (display (trie->dot pats)) (collect-garbage) (collect-garbage) (collect-garbage) (define-values (_result cpu-time delta-ms gc-time) (time-apply (lambda () (for [(j (in-range N-MESSAGES))] (define i (random N-PATTERNS)) (trie-lookup pats (tuple i i) #f))) '())) (printf "Delta ~a ms; that is, ~a microsec per routed message, ~a Hz\n" delta-ms (/ (* 1000.0 delta-ms) N-MESSAGES) (/ N-MESSAGES (/ delta-ms 1000.0)))