treetrie-2015/routingspeed.rkt

36 lines
796 B
Racket

#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)))