package container import ( "testing" ) // TestEnqueue tests the Enqueue method of the PriorityQueue. func TestEnqueue(t *testing.T) { pq := NewPriorityQueue[int, int](true) // Min-priority queue pq.Enqueue(3, 3) pq.Enqueue(1, 1) pq.Enqueue(2, 2) expected := []int{1, 3, 2} // Expected min-heap state after enqueuing elements for i, v := range pq.heap.elements { if v.Value != expected[i] { t.Errorf("Enqueue() test failed: expected %v at index %d, got %v", expected[i], i, v) } } } // TestDequeue tests the Dequeue method of the PriorityQueue. func TestDequeue(t *testing.T) { pq := NewPriorityQueue[int, int](true) pq.Enqueue(3, 3) pq.Enqueue(1, 1) pq.Enqueue(2, 2) if val := pq.Dequeue(); val != 1 { t.Errorf("Dequeue() test failed: expected 1, got %v", val) } if val := pq.Dequeue(); val != 2 { t.Errorf("Dequeue() test failed: expected 2, got %v", val) } } // TestPeek tests the Peek method of the PriorityQueue. func TestPQueuePeek(t *testing.T) { pq := NewPriorityQueue[int, int](true) pq.Enqueue(3, 3) pq.Enqueue(1, 1) pq.Enqueue(2, 2) if val := pq.Peek(); val != 1 { t.Errorf("Peek() test failed: expected 1, got %v", val) } // Check if Peek() doesn't remove the element if val := pq.Dequeue(); val != 1 { t.Errorf("Peek() test failed: Peek() should not remove the element") } } // TestIsEmpty tests the IsEmpty method of the PriorityQueue. func TestIsEmpty(t *testing.T) { pq := NewPriorityQueue[int, int](true) if !pq.IsEmpty() { t.Errorf("IsEmpty() test failed: expected true, got false") } pq.Enqueue(1, 1) if pq.IsEmpty() { t.Errorf("IsEmpty() test failed: expected false, got true") } pq.Dequeue() if !pq.IsEmpty() { t.Errorf("IsEmpty() test failed: expected true, got false") } }