Skip to content

Commit 28c12ef

Browse files
author
Nikola Yurukov
committed
[Test] Add Fibonacci heap tests
1 parent 438f431 commit 28c12ef

File tree

3 files changed

+514
-0
lines changed

3 files changed

+514
-0
lines changed

fibheap/fibheap_examples_test.go

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package fibheap
2+
3+
// Tests for the Fibonacci heap with floating point number priorities
4+
5+
import (
6+
"fmt"
7+
)
8+
9+
const SomeNumber float64 = 15.5
10+
const SomeSmallerNumber float64 = -10.1
11+
const SomeLargerNumber float64 = 112.211
12+
13+
func ExampleFloatingFibonacciHeap_Enqueue() {
14+
heap := NewFloatFibHeap()
15+
// The function returns a pointer
16+
// to the node that contains the new value
17+
node := heap.Enqueue(SomeNumber)
18+
fmt.Println(node.priority)
19+
// Output: 15.5
20+
}
21+
22+
func ExampleFloatingFibonacciHeap_Min() {
23+
heap := NewFloatFibHeap()
24+
heap.Enqueue(SomeNumber)
25+
heap.Enqueue(SomeLargerNumber)
26+
min, _ := heap.Min()
27+
fmt.Println(min.priority)
28+
// Output: 15.5
29+
}
30+
31+
func ExampleFloatingFibonacciHeap_IsEmpty() {
32+
heap := NewFloatFibHeap()
33+
fmt.Printf("Empty before insert? %v\n", heap.IsEmpty())
34+
heap.Enqueue(SomeNumber)
35+
fmt.Printf("Empty after insert? %v\n", heap.IsEmpty())
36+
// Output:
37+
// Empty before insert? true
38+
// Empty after insert? false
39+
}
40+
41+
func ExampleFloatingFibonacciHeap_Size() {
42+
heap := NewFloatFibHeap()
43+
fmt.Printf("Size before insert: %v\n", heap.Size())
44+
heap.Enqueue(SomeNumber)
45+
fmt.Printf("Size after insert: %v\n", heap.Size())
46+
// Output:
47+
// Size before insert: 0
48+
// Size after insert: 1
49+
}
50+
51+
func ExampleFloatingFibonacciHeap_DequeueMin() {
52+
heap := NewFloatFibHeap()
53+
heap.Enqueue(SomeNumber)
54+
node, _ := heap.DequeueMin()
55+
fmt.Printf("Dequeueing minimal element: %v\n", node.priority)
56+
// Output:
57+
// Dequeueing minimal element: 15.5
58+
}
59+
60+
func ExampleFloatingFibonacciHeap_DecreaseKey() {
61+
heap := NewFloatFibHeap()
62+
node := heap.Enqueue(SomeNumber)
63+
min, _ := heap.Min()
64+
fmt.Printf("Minimal element before decreasing key: %v\n", min.priority)
65+
heap.DecreaseKey(node, SomeSmallerNumber)
66+
min, _ = heap.Min()
67+
fmt.Printf("Minimal element after decreasing key: %v\n", min.priority)
68+
// Output:
69+
// Minimal element before decreasing key: 15.5
70+
// Minimal element after decreasing key: -10.1
71+
}
72+
73+
func ExampleFloatingFibonacciHeap_Delete() {
74+
heap := NewFloatFibHeap()
75+
node := heap.Enqueue(SomeNumber)
76+
heap.Enqueue(SomeLargerNumber)
77+
min, _ := heap.Min()
78+
fmt.Printf("Minimal element before deletion: %v\n", min.priority)
79+
heap.Delete(node)
80+
min, _ = heap.Min()
81+
fmt.Printf("Minimal element after deletion: %v\n", min.priority)
82+
// Output:
83+
// Minimal element before deletion: 15.5
84+
// Minimal element after deletion: 112.211
85+
}
86+
87+
func ExampleFloatingFibonacciHeap_Merge() {
88+
heap1 := NewFloatFibHeap()
89+
heap2 := NewFloatFibHeap()
90+
heap1.Enqueue(SomeNumber)
91+
heap1.Enqueue(SomeLargerNumber)
92+
heap2.Enqueue(SomeSmallerNumber)
93+
min, _ := heap1.Min()
94+
fmt.Printf("Minimal element of heap 1: %v\n", min.priority)
95+
min, _ = heap2.Min()
96+
fmt.Printf("Minimal element of heap 2: %v\n", min.priority)
97+
heap, _ := heap1.Merge(heap2)
98+
min, _ = heap.Min()
99+
fmt.Printf("Minimal element of merged heap: %v\n", min.priority)
100+
// Output:
101+
// Minimal element of heap 1: 15.5
102+
// Minimal element of heap 2: -10.1
103+
// Minimal element of merged heap: -10.1
104+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package fibheap
2+
3+
// Example Test for the Fibonacci heap with floats
4+
5+
import (
6+
"fmt"
7+
)
8+
9+
const SomeNumberAround0 float64 = -0.001
10+
const SomeLargerNumberAround15 float64 = 15.77
11+
const SomeNumberAroundMinus1000 float64 = -1002.2001
12+
const SomeNumberAroundMinus1003 float64 = -1003.4
13+
14+
func Example() {
15+
heap1 := NewFloatFibHeap()
16+
fmt.Println("Created heap 1.")
17+
nodeh1_1 := heap1.Enqueue(SomeLargerNumberAround15)
18+
fmt.Printf("Heap 1 insert: %v\n", nodeh1_1.priority)
19+
20+
heap2 := NewFloatFibHeap()
21+
fmt.Println("Created heap 2.")
22+
fmt.Printf("Heap 2 is empty? %v\n", heap2.IsEmpty())
23+
nodeh2_1 := heap2.Enqueue(SomeNumberAroundMinus1000)
24+
fmt.Printf("Heap 2 insert: %v\n", nodeh2_1.priority)
25+
nodeh2_2 := heap2.Enqueue(SomeNumberAround0)
26+
fmt.Printf("Heap 2 insert: %v\n", nodeh2_2.priority)
27+
fmt.Printf("Heap 1 size: %v\n", heap1.Size())
28+
fmt.Printf("Heap 2 size: %v\n", heap2.Size())
29+
fmt.Printf("Heap 1 is empty? %v\n", heap1.IsEmpty())
30+
fmt.Printf("Heap 2 is empty? %v\n", heap2.IsEmpty())
31+
32+
fmt.Printf("\nMerge Heap 1 and Heap 2.\n")
33+
mergedHeap, _ := heap1.Merge(heap2)
34+
fmt.Printf("Merged heap size: %v\n", mergedHeap.Size())
35+
fmt.Printf("Set node with priority %v to new priority %v\n", SomeNumberAroundMinus1000, SomeNumberAroundMinus1003)
36+
37+
mergedHeap.DecreaseKey(nodeh2_1, SomeNumberAroundMinus1003)
38+
min, _ := mergedHeap.DequeueMin()
39+
fmt.Printf("Dequeue minimum of merged heap: %v\n", min.priority)
40+
fmt.Printf("Merged heap size: %v\n", mergedHeap.Size())
41+
42+
fmt.Printf("Delete from merged heap: %v\n", SomeNumberAround0)
43+
mergedHeap.Delete(nodeh2_2)
44+
fmt.Printf("Merged heap size: %v\n", mergedHeap.Size())
45+
46+
min, _ = mergedHeap.DequeueMin()
47+
fmt.Printf("Extracting minimum of merged heap: %v\n", min.priority)
48+
fmt.Printf("Merged heap size: %v\n", mergedHeap.Size())
49+
fmt.Printf("Merged heap is empty? %v\n", mergedHeap.IsEmpty())
50+
51+
// Output:
52+
// Created heap 1.
53+
// Heap 1 insert: 15.77
54+
// Created heap 2.
55+
// Heap 2 is empty? true
56+
// Heap 2 insert: -1002.2001
57+
// Heap 2 insert: -0.001
58+
// Heap 1 size: 1
59+
// Heap 2 size: 2
60+
// Heap 1 is empty? false
61+
// Heap 2 is empty? false
62+
//
63+
// Merge Heap 1 and Heap 2.
64+
// Merged heap size: 3
65+
// Set node with priority -1002.2001 to new priority -1003.4
66+
// Dequeue minimum of merged heap: -1003.4
67+
// Merged heap size: 2
68+
// Delete from merged heap: -0.001
69+
// Merged heap size: 1
70+
// Extracting minimum of merged heap: 15.77
71+
// Merged heap size: 0
72+
// Merged heap is empty? true
73+
}

0 commit comments

Comments
 (0)