Files
wehub-resource-sync 498b235461
Build and test / Build and test AMD64 Ubuntu 22.04 (push) Failing after 0s
Publish Builder / amazonlinux2023 (push) Failing after 1s
Build and test / UT for Go (push) Has been skipped
Publish KRTE Images / KRTE (push) Failing after 1s
Build and test / Integration Test (push) Has been skipped
Build and test / Upload Code Coverage (push) Has been skipped
Publish Builder / rockylinux9 (push) Failing after 1s
Publish Builder / ubuntu22.04 (push) Failing after 0s
Publish Builder / ubuntu24.04 (push) Failing after 0s
Publish Gpu Builder / publish-gpu-builder (push) Failing after 1s
Publish Test Images / PyTest (push) Failing after 0s
Build and test / UT for Cpp (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:31:17 +08:00

231 lines
5.7 KiB
Go

// Licensed to the LF AI & Data foundation under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package assign
import (
"testing"
"github.com/stretchr/testify/assert"
)
// TestBaseItem_GetSetPriority tests BaseItem priority methods
func TestBaseItem_GetSetPriority(t *testing.T) {
item := &BaseItem{}
// Initial priority should be 0
assert.Equal(t, 0, item.getPriority())
// Set priority
item.setPriority(100)
assert.Equal(t, 100, item.getPriority())
}
// TestNewPriorityQueue tests priority queue creation
func TestNewPriorityQueue(t *testing.T) {
pq := NewPriorityQueue()
assert.NotNil(t, pq)
assert.Equal(t, 0, pq.Len())
}
// TestNewPriorityQueuePtr tests priority queue pointer creation
func TestNewPriorityQueuePtr(t *testing.T) {
pq := NewPriorityQueuePtr()
assert.NotNil(t, pq)
assert.Equal(t, 0, pq.Len())
}
// TestPriorityQueue_PushPop tests basic push and pop operations
func TestPriorityQueue_PushPop(t *testing.T) {
pq := NewPriorityQueue()
// Create items with different priorities
item1 := NewNodeItem(100, 1)
item2 := NewNodeItem(50, 2)
item3 := NewNodeItem(200, 3)
// Push items
pq.Push(&item1)
pq.Push(&item2)
pq.Push(&item3)
assert.Equal(t, 3, pq.Len())
// Pop should return items in priority order (lowest first)
// item2 has priority 50 (lowest)
popped1 := pq.Pop().(*NodeItem)
assert.Equal(t, int64(2), popped1.NodeID)
// item1 has priority 100
popped2 := pq.Pop().(*NodeItem)
assert.Equal(t, int64(1), popped2.NodeID)
// item3 has priority 200 (highest)
popped3 := pq.Pop().(*NodeItem)
assert.Equal(t, int64(3), popped3.NodeID)
assert.Equal(t, 0, pq.Len())
}
// TestPriorityQueue_SingleItem tests with single item
func TestPriorityQueue_SingleItem(t *testing.T) {
pq := NewPriorityQueue()
item := NewNodeItem(100, 1)
pq.Push(&item)
assert.Equal(t, 1, pq.Len())
popped := pq.Pop().(*NodeItem)
assert.Equal(t, int64(1), popped.NodeID)
assert.Equal(t, 0, pq.Len())
}
// TestPriorityQueue_SamePriority tests items with same priority
func TestPriorityQueue_SamePriority(t *testing.T) {
pq := NewPriorityQueue()
// Create items with same priority
item1 := NewNodeItem(100, 1)
item2 := NewNodeItem(100, 2)
item3 := NewNodeItem(100, 3)
pq.Push(&item1)
pq.Push(&item2)
pq.Push(&item3)
assert.Equal(t, 3, pq.Len())
// All have same priority, should still pop 3 items
_ = pq.Pop()
_ = pq.Pop()
_ = pq.Pop()
assert.Equal(t, 0, pq.Len())
}
// TestPriorityQueue_RePush tests pushing item back after popping
func TestPriorityQueue_RePush(t *testing.T) {
pq := NewPriorityQueue()
item1 := NewNodeItem(50, 1)
item2 := NewNodeItem(100, 2)
pq.Push(&item1)
pq.Push(&item2)
// Pop the lowest priority item
popped := pq.Pop().(*NodeItem)
assert.Equal(t, int64(1), popped.NodeID)
assert.Equal(t, 1, pq.Len())
// Modify and push back
popped.AddCurrentScoreDelta(200)
pq.Push(popped)
assert.Equal(t, 2, pq.Len())
// Now item2 should be popped first (lower priority)
nextPopped := pq.Pop().(*NodeItem)
assert.Equal(t, int64(2), nextPopped.NodeID)
}
// TestPriorityQueue_LargeDataset tests with many items
func TestPriorityQueue_LargeDataset(t *testing.T) {
pq := NewPriorityQueue()
// Push 100 items with random priorities
for i := 0; i < 100; i++ {
item := NewNodeItem(i*10, int64(i))
pq.Push(&item)
}
assert.Equal(t, 100, pq.Len())
// Pop all items and verify they come out in priority order
lastPriority := -1
for i := 0; i < 100; i++ {
item := pq.Pop().(*NodeItem)
currentPriority := item.getPriority()
assert.GreaterOrEqual(t, currentPriority, lastPriority)
lastPriority = currentPriority
}
assert.Equal(t, 0, pq.Len())
}
// TestPriorityQueue_WithAssignedScore tests priority ordering with assigned scores
func TestPriorityQueue_WithAssignedScore(t *testing.T) {
pq := NewPriorityQueue()
item1 := NewNodeItem(100, 1)
item1.AddAssignedScore(50) // Priority: 100 - 50 = 50
item2 := NewNodeItem(80, 2)
item2.AddAssignedScore(50) // Priority: 80 - 50 = 30
item3 := NewNodeItem(120, 3)
item3.AddAssignedScore(50) // Priority: 120 - 50 = 70
pq.Push(&item1)
pq.Push(&item2)
pq.Push(&item3)
// Should pop in order: item2 (30), item1 (50), item3 (70)
popped1 := pq.Pop().(*NodeItem)
assert.Equal(t, int64(2), popped1.NodeID)
popped2 := pq.Pop().(*NodeItem)
assert.Equal(t, int64(1), popped2.NodeID)
popped3 := pq.Pop().(*NodeItem)
assert.Equal(t, int64(3), popped3.NodeID)
}
// TestHeapQueue_Len tests heap queue length
func TestHeapQueue_Len(t *testing.T) {
hq := make(heapQueue, 0)
assert.Equal(t, 0, hq.Len())
item := &BaseItem{}
hq = append(hq, item)
assert.Equal(t, 1, hq.Len())
}
// TestHeapQueue_Less tests heap queue comparison
func TestHeapQueue_Less(t *testing.T) {
item1 := &BaseItem{priority: 10}
item2 := &BaseItem{priority: 20}
hq := heapQueue{item1, item2}
assert.True(t, hq.Less(0, 1))
assert.False(t, hq.Less(1, 0))
}
// TestHeapQueue_Swap tests heap queue swap
func TestHeapQueue_Swap(t *testing.T) {
item1 := &BaseItem{priority: 10}
item2 := &BaseItem{priority: 20}
hq := heapQueue{item1, item2}
hq.Swap(0, 1)
assert.Equal(t, 20, hq[0].getPriority())
assert.Equal(t, 10, hq[1].getPriority())
}