From ad76c9ea7b16ba163c972a927914c76dfe41c32b Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Sun, 3 Oct 2010 00:31:16 -0600 Subject: [PATCH] fixed splay-tree bug --- collects/data/splay-tree.rkt | 11 +++++++---- collects/tests/data/ordered-dict.rkt | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/collects/data/splay-tree.rkt b/collects/data/splay-tree.rkt index 6b6efa5376..68bed863c6 100644 --- a/collects/data/splay-tree.rkt +++ b/collects/data/splay-tree.rkt @@ -865,10 +865,13 @@ Top-down splay ;; condensing copy (v:set-next! mem* NODE-SIZE) (let loop ([n root]) - (when n - (let ([n* (vnode! mem* (vnode-key mem n) (vnode-value mem n) #f #f)]) - (set-vnode-left! mem* n* (loop (vnode-left mem n))) - (set-vnode-right! mem* n* (loop (vnode-right mem n)))))) + (cond [n + (let ([n* (vnode! mem* (vnode-key mem n) (vnode-value mem n) #f #f)]) + (set-vnode-left! mem* n* (loop (vnode-left mem n))) + (set-vnode-right! mem* n* (loop (vnode-right mem n))) + n*)] + [else #f])) + (set-compact-splay-tree-root! s NODE-SIZE) (set-compact-splay-tree-mem! s mem*)))) ;; ======== diff --git a/collects/tests/data/ordered-dict.rkt b/collects/tests/data/ordered-dict.rkt index 86219b35fc..6a463bd75c 100644 --- a/collects/tests/data/ordered-dict.rkt +++ b/collects/tests/data/ordered-dict.rkt @@ -227,12 +227,12 @@ (provide performance) -(define (deep-test [test 'splay]) +(define (deep-test [test 'splay] [count 100]) (let ([mk (case test ((splay) mksplay) ((adj) mkadj) ((skip) mkskip))]) - (for ([seed (in-range 100)]) + (for ([seed (in-range count)]) (random-seed seed) (printf "seed = ~s\n" seed) (p "test" dict-test mk #t))))