From ded88583efc35b2604e4554c6e9f6cedcedae16c Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 20 Dec 2007 00:06:36 -0600 Subject: [PATCH] fixed heap-push-all --- core/heaps/heaps.factor | 3 +-- extra/assoc-heaps/assoc-heaps-tests.factor | 9 +++++++++ extra/assoc-heaps/assoc-heaps.factor | 3 --- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/core/heaps/heaps.factor b/core/heaps/heaps.factor index f01b436e90..cd00dc0db3 100644 --- a/core/heaps/heaps.factor +++ b/core/heaps/heaps.factor @@ -6,7 +6,6 @@ IN: heaps MIXIN: priority-queue GENERIC: heap-push ( value key heap -- ) -GENERIC: heap-push-all ( assoc heap -- ) GENERIC: heap-peek ( heap -- value key ) GENERIC: heap-pop* ( heap -- ) GENERIC: heap-pop ( heap -- value key ) @@ -107,7 +106,7 @@ M: priority-queue heap-push ( value key heap -- ) [ heap-data ] keep up-heap ; -M: priority-queue heap-push-all ( assoc heap -- ) +: heap-push-all ( assoc heap -- ) [ swapd heap-push ] curry assoc-each ; M: priority-queue heap-peek ( heap -- value key ) diff --git a/extra/assoc-heaps/assoc-heaps-tests.factor b/extra/assoc-heaps/assoc-heaps-tests.factor index 656e7fc15c..24a7730847 100644 --- a/extra/assoc-heaps/assoc-heaps-tests.factor +++ b/extra/assoc-heaps/assoc-heaps-tests.factor @@ -44,3 +44,12 @@ T{ T{ max-heap T{ heap f V{ { 1 2 } { 0 1 } } } } } heap-pop ] unit-test + +[ +T{ + assoc-heap + f + H{ { 1 2 } { 3 4 } } + T{ min-heap T{ heap f V{ { 2 1 } { 4 3 } } } } +} +] [ H{ { 1 2 } { 3 4 } } H{ } clone [ heap-push-all ] keep ] unit-test diff --git a/extra/assoc-heaps/assoc-heaps.factor b/extra/assoc-heaps/assoc-heaps.factor index 0c44950923..552845b00e 100644 --- a/extra/assoc-heaps/assoc-heaps.factor +++ b/extra/assoc-heaps/assoc-heaps.factor @@ -40,9 +40,6 @@ M: assoc-heap heap-peek ( assoc-heap -- value key ) M: assoc-heap heap-push ( value key assoc-heap -- ) set-at ; -M: assoc-heap heap-push-all ( assoc assoc-heap -- ) - swap [ rot set-at ] curry* each ; - M: assoc-heap heap-pop ( assoc-heap -- value key ) dup assoc-heap-heap heap-pop swap rot dupd assoc-heap-assoc delete-at ;