]> gitweb.factorcode.org Git - factor.git/commitdiff
trees.splay: fix delete-at.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sat, 15 Oct 2011 00:52:24 +0000 (17:52 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sat, 15 Oct 2011 00:52:24 +0000 (17:52 -0700)
extra/trees/splay/splay-tests.factor
extra/trees/splay/splay.factor

index d858a14795d9c38d4df347ea24cd524c7c54129f..957b8738ea5f77c919e6e6ea6e07ef6a09ca79ee 100644 (file)
@@ -31,3 +31,8 @@ IN: trees.splay.tests
     { 1 "a" } { 2 "b" } { 3 "c" }
 } >splay >alist
 ] unit-test
+
+[ 0 ] [
+    100 iota [ dup zip >splay ] keep
+    [ over delete-at ] each assoc-size
+] unit-test
index 3b39bfe6427dac1f415dbb4b4b3ace38cfa4ccfb..2963638e84cfba6cc04c46064c7cc21096633a2d 100644 (file)
@@ -16,7 +16,7 @@ TUPLE: splay < tree ;
     dup left>>
     [ right>> swap left<< ] 2keep
     [ right<< ] keep ;
-                                                        
+
 : rotate-left ( node -- node )
     dup right>>
     [ left>> swap right<< ] 2keep
@@ -94,18 +94,13 @@ DEFER: (splay)
     dup [ dup get-largest key>> swap splay-at ] when ;
 
 : splay-join ( n2 n1 -- node )
-    splay-largest [
-        [ right<< ] keep
-    ] [
-        drop f
-    ] if* ;
+    splay-largest [ [ right<< ] keep ] when* ;
 
 : remove-splay ( key tree -- )
-    [ get-splay nip ] keep [
-        dup dec-count
+    2dup get-splay [
         dup right>> swap left>> splay-join
-        swap root<<
-    ] [ drop ] if* ;
+        >>root dec-count drop
+    ] [ 3drop ] if ;
 
 : set-splay ( value key tree -- )
     2dup get-splay [ 2nip value<< ] [