mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 16:30:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package queue
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestChangePriority(t *testing.T) {
 | 
						|
	q := NewPriorityQueue[*priorityElement](100,
 | 
						|
		func(src *priorityElement, dst *priorityElement) bool {
 | 
						|
			return src.Priority < dst.Priority
 | 
						|
		})
 | 
						|
	e1 := &priorityElement{
 | 
						|
		Data:     10,
 | 
						|
		Priority: 200,
 | 
						|
	}
 | 
						|
	_ = q.Enqueue(e1)
 | 
						|
	e2 := &priorityElement{
 | 
						|
		Data:     10,
 | 
						|
		Priority: 100,
 | 
						|
	}
 | 
						|
	_ = q.Enqueue(e2)
 | 
						|
	//e1.Priority = 10
 | 
						|
	val, _ := q.Dequeue()
 | 
						|
	println(val)
 | 
						|
}
 | 
						|
 | 
						|
type priorityElement struct {
 | 
						|
	Data     any
 | 
						|
	Priority int
 | 
						|
}
 | 
						|
 | 
						|
func TestPriorityQueue_Remove(t *testing.T) {
 | 
						|
	q := NewPriorityQueue[*priorityElement](100,
 | 
						|
		func(src *priorityElement, dst *priorityElement) bool {
 | 
						|
			return src.Priority < dst.Priority
 | 
						|
		})
 | 
						|
 | 
						|
	for i := 8; i > 0; i-- {
 | 
						|
		q.Enqueue(&priorityElement{Priority: i})
 | 
						|
	}
 | 
						|
	requirePriorities(t, q)
 | 
						|
 | 
						|
	q.Remove(8)
 | 
						|
	requirePriorities(t, q)
 | 
						|
	q.Remove(7)
 | 
						|
	requirePriorities(t, q)
 | 
						|
 | 
						|
	q.Remove(2)
 | 
						|
	requirePriorities(t, q)
 | 
						|
 | 
						|
	q.Remove(1)
 | 
						|
	requirePriorities(t, q)
 | 
						|
 | 
						|
	q.Remove(0)
 | 
						|
	requirePriorities(t, q)
 | 
						|
}
 | 
						|
 | 
						|
func requirePriorities(t *testing.T, q *PriorityQueue[*priorityElement]) {
 | 
						|
	ps := make([]int, 0, q.Len())
 | 
						|
	for _, val := range q.data[1:] {
 | 
						|
		ps = append(ps, val.Priority)
 | 
						|
	}
 | 
						|
	for i := q.Len(); i >= 2; i-- {
 | 
						|
		require.False(t, q.less(q.data[i], q.data[i/2]), ps)
 | 
						|
	}
 | 
						|
}
 |