Heap unit test fixes

release
Slava Pestov 2007-11-05 12:48:22 -05:00
parent d481f1480c
commit 855c444ec5
3 changed files with 19 additions and 23 deletions

View File

@ -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: <max-heap>
{ $see-also <min-heap> } ;
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." }
{ $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? } ;

View File

@ -25,11 +25,11 @@ IN: temporary
3 [ dup heap-pop* ] times
] unit-test
[ 2 t ] [ <min-heap> 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 ] [ <min-heap> 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 ] [ <min-heap> 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 ] [ <min-heap> 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 ] [ <max-heap> 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 ] [ <max-heap> 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 ] [ <max-heap> heap-length ] unit-test
[ 1 ] [ <max-heap> 1 1 pick heap-push heap-length ] unit-test
[ 1 ] [ <max-heap> t 1 pick heap-push heap-length ] unit-test

View File

@ -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 )
<min-heap> tuck heap-push-all heap-pop-all ;