mirror of
https://github.com/fumiama/sched.git
synced 2026-06-04 23:10:26 +08:00
101 lines
1.9 KiB
Go
101 lines
1.9 KiB
Go
package sched
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"slices"
|
|
"testing"
|
|
)
|
|
|
|
func TestSched(t *testing.T) {
|
|
buf := make([]int, 4096)
|
|
for i := 0; i < len(buf); i++ {
|
|
buf[i] = i
|
|
}
|
|
for i := 1; i < len(buf); i++ {
|
|
sc := NewTask(buf[:i], func(_ int, t []int) ([]int, error) {
|
|
return t, nil
|
|
}, false, false)
|
|
for j := 1; j < 256; j++ {
|
|
r, err := sc.Collect(j, false, true)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !slices.Equal(r, buf[:i]) {
|
|
t.Fatal("expect", buf[:i], "got", r)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkSched(b *testing.B) {
|
|
arr := make([]uint8, 64*1024*1024) // 64M
|
|
_, err := rand.Read(arr)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
b.Run("single", func(b *testing.B) {
|
|
b.SetBytes(int64(len(arr)))
|
|
b.ResetTimer()
|
|
for i := range arr {
|
|
arr[i]++
|
|
}
|
|
})
|
|
_, err = rand.Read(arr)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
b.Run("para512K", func(b *testing.B) {
|
|
b.SetBytes(int64(len(arr)))
|
|
b.ResetTimer()
|
|
_, _ = NewTask(arr, func(_ int, x []byte) ([]byte, error) {
|
|
for i := range x {
|
|
arr[i] /= 3
|
|
arr[i]++
|
|
arr[i] *= 5
|
|
arr[i]++
|
|
arr[i] /= 7
|
|
arr[i]++
|
|
}
|
|
return arr, nil
|
|
}, false, false).Collect(512*1024, true, true) // 512K batch
|
|
})
|
|
_, err = rand.Read(arr)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
b.Run("para1M", func(b *testing.B) {
|
|
b.SetBytes(int64(len(arr)))
|
|
b.ResetTimer()
|
|
_, _ = NewTask(arr, func(_ int, x []byte) ([]byte, error) {
|
|
for i := range x {
|
|
arr[i] /= 3
|
|
arr[i]++
|
|
arr[i] *= 5
|
|
arr[i]++
|
|
arr[i] /= 7
|
|
arr[i]++
|
|
}
|
|
return arr, nil
|
|
}, false, false).Collect(1024*1024, true, true) // 1M batch
|
|
})
|
|
_, err = rand.Read(arr)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
b.Run("para2M", func(b *testing.B) {
|
|
b.SetBytes(int64(len(arr)))
|
|
b.ResetTimer()
|
|
_, _ = NewTask(arr, func(_ int, x []byte) ([]byte, error) {
|
|
for i := range x {
|
|
arr[i] /= 3
|
|
arr[i]++
|
|
arr[i] *= 5
|
|
arr[i]++
|
|
arr[i] /= 7
|
|
arr[i]++
|
|
}
|
|
return arr, nil
|
|
}, false, false).Collect(2*1024*1024, true, true) // 2M batch
|
|
})
|
|
}
|