mirror of
https://gitee.com/dromara/mayfly-go
synced 2025-11-04 00:10:25 +08:00
68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package runner
|
|
|
|
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)
|
|
}
|
|
}
|