go_dreamfactory/lego/sys/timewheel/timewheel_test.go
2022-06-07 20:18:22 +08:00

46 lines
933 B
Go

package timewheel_test
import (
"fmt"
"testing"
"time"
"go_dreamfactory/lego/sys/timewheel"
)
func checkTimeCost(t *testing.T, start, end time.Time, before int, after int) bool {
due := end.Sub(start)
if due > time.Duration(after)*time.Millisecond {
t.Error("delay run")
return false
}
if due < time.Duration(before)*time.Millisecond {
t.Error("run ahead")
return false
}
return true
}
func TestAddFunc(t *testing.T) {
tw, _ := timewheel.NewSys(timewheel.SetTick(100), timewheel.SetBucketsNum(10))
tw.Start()
defer tw.Stop()
for index := 1; index < 6; index++ {
queue := make(chan bool, 0)
start := time.Now()
tw.Add(time.Duration(index)*time.Second, func(*timewheel.Task, ...interface{}) {
queue <- true
})
<-queue
before := index*1000 - 200
after := index*1000 + 200
checkTimeCost(t, start, time.Now(), before, after)
fmt.Println("time since: ", time.Since(start).String())
}
}