65 lines
1.5 KiB
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)
|
|
})
|
|
}
|
|
}
|