l-export-async/coroutine/fixed_test.go

65 lines
1.5 KiB
Go

package coroutine
import (
"fmt"
"testing"
"time"
)
func TestFixed_Run(t *testing.T) {
tests := []struct {
name string
count int
taskCnt int
expectedMinMill time.Duration
expectedMaxMill time.Duration
}{
{
name: "超过时阻塞 100ms",
count: 1,
taskCnt: 2,
expectedMinMill: 100 * time.Millisecond,
},
{
name: "超过时阻塞 200ms",
count: 1,
taskCnt: 3,
expectedMinMill: 200 * time.Millisecond,
},
{
name: "相等限制时不阻塞",
count: 3,
taskCnt: 3,
expectedMaxMill: 10 * time.Millisecond,
},
{
name: "低于限制时不阻塞",
count: 4,
taskCnt: 3,
expectedMaxMill: 10 * time.Millisecond,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
f := NewFixed(tt.count)
start := time.Now()
for i := 0; i < tt.taskCnt; i++ {
f.Run("test", func() {
time.Sleep(100 * time.Millisecond)
})
}
end := time.Now()
milliseconds := end.Sub(start).Milliseconds()
if tt.expectedMinMill > 0 && milliseconds < tt.expectedMinMill.Milliseconds() {
t.Errorf("运行时长最少 %d ms, 实际 %d ms", tt.expectedMinMill, milliseconds)
}
if tt.expectedMaxMill > 0 && milliseconds > tt.expectedMaxMill.Milliseconds() {
t.Errorf("运行时长不超过 %d ms, 实际 %d ms", tt.expectedMaxMill, milliseconds)
}
fmt.Println(milliseconds)
})
}
}