From 855c444ec50dcb03d836e12c089cc63a3302b203 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Mon, 5 Nov 2007 12:48:22 -0500 Subject: [PATCH] Heap unit test fixes --- core/heaps/heaps-docs.factor | 24 ++++++++++++++---------- core/heaps/heaps-tests.factor | 8 ++++---- core/heaps/heaps.factor | 10 +--------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/core/heaps/heaps-docs.factor b/core/heaps/heaps-docs.factor index b140b418aa..3605ec519a 100644 --- a/core/heaps/heaps-docs.factor +++ b/core/heaps/heaps-docs.factor @@ -1,4 +1,4 @@ -USING: heaps.private help.markup help.syntax kernel math ; +USING: heaps.private help.markup help.syntax kernel math assocs ; IN: heaps ARTICLE: "heaps" "Heaps" @@ -40,36 +40,40 @@ HELP: { $see-also } ; HELP: heap-push -{ $values { "key" "a comparable object" } { "value" object } { "heap" } } +{ $values { "key" "a comparable object" } { "value" object } { "heap" heap } } { $description "Push an pair onto a heap. The key must be comparable with all other keys by the " { $link <=> } " generic word." } +{ $side-effects "heap" } { $see-also heap-push-all heap-pop } ; HELP: heap-push-all -{ $values { "seq" "a sequence of pairs" } { "heap" } } -{ $description "Push a sequence of pairs onto a heap." } -{ $see-also heap-push heap-pop } ; +{ $values { "assoc" assoc } { "heap" heap } } +{ $description "Push every key/value pair of an assoc onto a heap." } +{ $side-effects "heap" } +{ $see-also heap-push heap-pop } ; HELP: heap-peek -{ $values { "heap" } { "key" object } { "value" object } } +{ $values { "heap" heap } { "key" object } { "value" object } } { $description "Outputs the first element in the heap, leaving it in the heap." } { $see-also heap-pop heap-pop* } ; HELP: heap-pop* -{ $values { "heap" } } +{ $values { "heap" heap } } { $description "Removes the first element from the heap." } +{ $side-effects "heap" } { $see-also heap-pop heap-push heap-peek } ; HELP: heap-pop -{ $values { "heap" } { "key" object } { "value" object } } +{ $values { "heap" heap } { "key" object } { "value" object } } { $description "Outputs the first element in the heap and removes it from the heap." } +{ $side-effects "heap" } { $see-also heap-pop* heap-push heap-peek } ; HELP: heap-empty? -{ $values { "heap" } { "?" "a boolean" } } +{ $values { "heap" heap } { "?" "a boolean" } } { $description "Tests if a " { $link heap } " has no nodes." } { $see-also heap-length heap-peek } ; HELP: heap-length -{ $values { "heap" } { "n" integer } } +{ $values { "heap" heap } { "n" integer } } { $description "Returns the number of key/value pairs in the heap." } { $see-also heap-empty? } ; diff --git a/core/heaps/heaps-tests.factor b/core/heaps/heaps-tests.factor index 68e667d80e..03e0816c19 100644 --- a/core/heaps/heaps-tests.factor +++ b/core/heaps/heaps-tests.factor @@ -25,11 +25,11 @@ IN: temporary 3 [ dup heap-pop* ] times ] unit-test -[ 2 t ] [ 300 t pick heap-push 200 t pick heap-push 400 t pick heap-push 3 t pick heap-push 2 t pick heap-push heap-pop ] unit-test +[ t 2 ] [ t 300 pick heap-push t 200 pick heap-push t 400 pick heap-push t 3 pick heap-push t 2 pick heap-push heap-pop ] unit-test -[ 1 t ] [ 300 300 pick heap-push 200 200 pick heap-push 400 400 pick heap-push 3 3 pick heap-push 2 2 pick heap-push 1 1 pick heap-push heap-pop ] unit-test +[ t 1 ] [ t 300 pick heap-push t 200 pick heap-push t 400 pick heap-push t 3 pick heap-push t 2 pick heap-push t 1 pick heap-push heap-pop ] unit-test -[ 400 t ] [ 300 300 pick heap-push 200 200 pick heap-push 400 400 pick heap-push 3 3 pick heap-push 2 2 pick heap-push 1 1 pick heap-push heap-pop ] unit-test +[ t 400 ] [ t 300 pick heap-push t 200 pick heap-push t 400 pick heap-push t 3 pick heap-push t 2 pick heap-push t 1 pick heap-push heap-pop ] unit-test [ 0 ] [ heap-length ] unit-test -[ 1 ] [ 1 1 pick heap-push heap-length ] unit-test +[ 1 ] [ t 1 pick heap-push heap-length ] unit-test diff --git a/core/heaps/heaps.factor b/core/heaps/heaps.factor index 14d3e20a60..73a37660f6 100644 --- a/core/heaps/heaps.factor +++ b/core/heaps/heaps.factor @@ -92,7 +92,7 @@ PRIVATE> up-heap ; : heap-push-all ( assoc heap -- ) - [ swap heap-push ] curry assoc-each ; + [ swapd heap-push ] curry assoc-each ; : heap-peek ( heap -- value key ) heap-data first first2 swap ; @@ -111,11 +111,3 @@ PRIVATE> : heap-empty? ( heap -- ? ) heap-data empty? ; : heap-length ( heap -- n ) heap-data length ; - -: heap-pop-all ( heap -- seq ) - [ dup heap-empty? not ] - [ dup heap-pop drop ] - [ ] unfold nip ; - -: heap-sort ( assoc -- seq ) - tuck heap-push-all heap-pop-all ;