use Test; use strict; my ($h, $sv, @av); $|++; BEGIN { plan tests => 33 } use Heap::Priority; ok(1); $h = new Heap::Priority; # test as simple queue, make a basic heap $h->add($_) for 'a'..'z'; $sv = $h->get_heap; ok($sv == 26); @av = $h->get_heap; ok( 'abcdefghijklmnopqrstuvwxyz' eq join'',@av); $sv = $h->get_priority_levels; ok($sv == 1); @av = $h->get_priority_levels; ok( '0' eq join'',@av); $sv = $h->pop(); ok( $sv eq 'a' ); $h->lifo(); $sv = $h->pop(); ok( $sv eq 'z' ); @av = $h->get_heap; ok( 'yxwvutsrqponmlkjihgfedcb' eq join'',@av ); $h->fifo(); $h->delete_item('f'); @av = $h->get_heap; ok( 'bcdeghijklmnopqrstuvwxy' eq join'',@av); $h->add('c',1); @av = $h->get_heap; ok( 'cbcdeghijklmnopqrstuvwxy' eq join'',@av); $h->modify_priority('c',1); @av = $h->get_heap; ok( 'cbdeghijklmnopqrstuvwxy' eq join'',@av); $sv = $h->get_priority_levels; ok($sv == 2); $h->lowest_first; @av = $h->get_priority_levels; ok('01' eq join'',@av); $h->highest_first; @av = $h->get_priority_levels; ok('10' eq join'',@av); $sv = $h->get_level(0); ok( $sv = 24 ); $sv = $h->get_level(1); ok( $sv = 1 ); @av = $h->get_level(0); ok( 'bdeghijklmnopqrstuvwxy' eq join'',@av); $sv = $h->pop(); ok($sv eq 'c'); $sv = $h->get_priority_levels; ok($sv == 1); $h->add('d',1); $h->add('d'); @av = $h->get_heap; ok( 'dbdeghijklmnopqrstuvwxyd' eq join'',@av); $h->delete_item('d',0); @av = $h->get_heap; ok( 'dbeghijklmnopqrstuvwxy' eq join'',@av); $h->add('d',0); @av = $h->get_heap; ok( 'dbeghijklmnopqrstuvwxyd' eq join'',@av); $h->delete_item('d'); @av = $h->get_heap; ok( 'beghijklmnopqrstuvwxy' eq join'',@av); $h->add('e',1); $h->delete_item('e',0); @av = $h->get_heap; ok( 'ebghijklmnopqrstuvwxy' eq join'',@av); $h->delete_priority_level(0); @av = $h->get_heap; ok( 'e' eq join'',@av ); $h->delete_item('e'); $sv = $h->get_heap; ok( $sv == 0 ); @av = $h->get_heap; ok( ! @av ); $sv = $h->pop(); ok( ! $sv ); # test error messages $h->add(); ok( $h->err_str eq "Need to supply an item to add to heap!\n" ); $h->{'.error_message'} = ''; $h->delete_priority_level(42); ok( $h->err_str eq "Priority level 42 does not exist in heap!\n"); $h->{'.error_message'} = ''; $h->delete_item('non existant'); ok( $h->err_str eq "Item non existant does not exist in heap!\n" ); $h->{'.error_message'} = ''; $h->modify_priority('non existant'); ok( $h->err_str eq "Item non existant does not exist in heap!\n" ); $h->{'.error_message'} = ''; $h->get_level(42); ok( $h->err_str eq "Priority level 42 does not exist on heap!\n" ); $h->{'.error_message'} = '';