diff --git a/basis/persistent/heaps/heaps.factor b/basis/persistent/heaps/heaps.factor index 81c9959f84..6381b91dc3 100644 --- a/basis/persistent/heaps/heaps.factor +++ b/basis/persistent/heaps/heaps.factor @@ -1,4 +1,4 @@ -USING: kernel accessors multi-methods locals combinators math arrays +USING: kernel accessors locals combinators math arrays assocs namespaces sequences ; IN: persistent.heaps ! These are minheaps @@ -36,14 +36,15 @@ PRIVATE> GENERIC: sift-down ( value prio left right -- heap ) -METHOD: sift-down { empty-heap empty-heap } ; - -METHOD: sift-down { singleton-heap empty-heap } +: singleton-sift-down ( value prio singleton empty -- heap ) 3dup drop prio>> <= [ ] [ drop -rot [ [ value>> ] [ prio>> ] bi ] 2dip ] if ; +M: empty-heap sift-down + over singleton-heap? [ singleton-sift-down ] [ ] if ; + :: reroot-left ( value prio left right -- heap ) left value>> left prio>> value prio left left>> left right>> sift-down @@ -54,7 +55,7 @@ METHOD: sift-down { singleton-heap empty-heap } value prio right left>> right right>> sift-down ; -METHOD: sift-down { branch branch } +M: branch sift-down ! both arguments are branches 3dup [ prio>> <= ] both-with? [ ] [ 2dup [ prio>> ] bi@ <= [ reroot-left ] [ reroot-right ] if ] if ; diff --git a/basis/xml/generator/generator-tests.factor b/basis/xml/generator/generator-tests.factor index d44b713e55..052e5eab7f 100644 --- a/basis/xml/generator/generator-tests.factor +++ b/basis/xml/generator/generator-tests.factor @@ -1,3 +1,3 @@ -USING: tools.test io.streams.string xml.generator xml.writer ; +USING: tools.test io.streams.string xml.generator xml.writer accessors ; [ "" ] -[ "html" [ "body" [ "a" { { "href" "blah" } } contained*, ] tag, ] make-xml [ write-item ] with-string-writer ] unit-test +[ "html" [ "body" [ "a" { { "href" "blah" } } contained*, ] tag, ] make-xml [ body>> write-item ] with-string-writer ] unit-test