1
0
mirror of https://github.com/fumiama/sched.git synced 2026-06-04 23:10:26 +08:00
Files
sched/sched_test.go
2025-02-16 22:43:26 +09:00

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
})
}