@@ -148,6 +148,39 @@ func TestEnqueueDequeueMin(t *testing.T) {
148148 }
149149}
150150
151+ func TestFibHeap_Enqueue_Min (t * testing.T ) {
152+ heap := NewFloatFibHeap ()
153+ for i := 0 ; i < len (NumberSequence1 ); i ++ {
154+ heap .Enqueue (NumberSequence1 [i ])
155+ }
156+
157+ min , err := heap .Min ()
158+ assert .NoError (t , err )
159+ assert .Equal (t , Seq1FirstMinimum , min .Priority )
160+ }
161+
162+ func TestFibHeap_Min_EmptyHeap (t * testing.T ) {
163+ heap := NewFloatFibHeap ()
164+
165+ heap .Enqueue (0 )
166+ heap .DequeueMin ()
167+
168+ // Heap should be empty at this point
169+
170+ min , err := heap .Min ()
171+
172+ assert .EqualError (t , err , "Trying to get minimum element of empty heap" )
173+ assert .Nil (t , min )
174+ }
175+
176+ func TestFibHeap_DequeueMin_EmptyHeap (t * testing.T ) {
177+ heap := NewFloatFibHeap ()
178+ min , err := heap .DequeueMin ()
179+
180+ assert .EqualError (t , err , "Cannot dequeue minimum of empty heap" )
181+ assert .Nil (t , min )
182+ }
183+
151184func TestEnqueueDecreaseKey (t * testing.T ) {
152185 heap := NewFloatFibHeap ()
153186 var e1 , e2 , e3 * Entry
@@ -180,6 +213,37 @@ func TestEnqueueDecreaseKey(t *testing.T) {
180213 }
181214}
182215
216+ func TestFibHeap_DecreaseKey_EmptyHeap (t * testing.T ) {
217+ heap := NewFloatFibHeap ()
218+
219+ elem := heap .Enqueue (15 )
220+ heap .DequeueMin ()
221+
222+ // Heap should be empty at this point
223+ min , err := heap .DecreaseKey (elem , 0 )
224+
225+ assert .EqualError (t , err , "Cannot decrease key in an empty heap" )
226+ assert .Nil (t , min )
227+ }
228+
229+ func TestFibHeap_DecreaseKey_NilNode (t * testing.T ) {
230+ heap := NewFloatFibHeap ()
231+ heap .Enqueue (1 )
232+ min , err := heap .DecreaseKey (nil , 0 )
233+
234+ assert .EqualError (t , err , "Cannot decrease key: given node is nil" )
235+ assert .Nil (t , min )
236+ }
237+
238+ func TestFibHeap_DecreaseKey_LargerNewPriority (t * testing.T ) {
239+ heap := NewFloatFibHeap ()
240+ node := heap .Enqueue (1 )
241+ min , err := heap .DecreaseKey (node , 20 )
242+
243+ assert .EqualError (t , err , "The given new priority: 20, is larger than or equal to the old: 1" )
244+ assert .Nil (t , min )
245+ }
246+
183247func TestEnqueueDelete (t * testing.T ) {
184248 heap := NewFloatFibHeap ()
185249 var e1 , e2 , e3 * Entry
@@ -213,6 +277,24 @@ func TestEnqueueDelete(t *testing.T) {
213277 }
214278}
215279
280+ func TestFibHeap_Delete_EmptyHeap (t * testing.T ) {
281+ heap := NewFloatFibHeap ()
282+
283+ elem := heap .Enqueue (15 )
284+ heap .DequeueMin ()
285+
286+ // Heap should be empty at this point
287+ err := heap .Delete (elem )
288+ assert .EqualError (t , err , "Cannot delete element from an empty heap" )
289+ }
290+
291+ func TestFibHeap_Delete_NilNode (t * testing.T ) {
292+ heap := NewFloatFibHeap ()
293+ heap .Enqueue (1 )
294+ err := heap .Delete (nil )
295+ assert .EqualError (t , err , "Cannot delete node: given node is nil" )
296+ }
297+
216298func TestMerge (t * testing.T ) {
217299 heap1 := NewFloatFibHeap ()
218300 for i := 0 ; i < len (NumberSequence3 ); i ++ {
@@ -235,6 +317,14 @@ func TestMerge(t *testing.T) {
235317 }
236318}
237319
320+ func TestFibHeap_Merge_NilHeap (t * testing.T ) {
321+ var heap FloatingFibonacciHeap
322+ heap = NewFloatFibHeap ()
323+ newHeap , err := heap .Merge (nil )
324+ assert .EqualError (t , err , "One of the heaps to merge is nil. Cannot merge" )
325+ assert .Nil (t , newHeap )
326+ }
327+
238328// ***************
239329// BENCHMARK TESTS
240330// ***************
0 commit comments