mirror of
https://github.com/fumiama/sched.git
synced 2026-06-10 10:23:16 +08:00
init: add codes
This commit is contained in:
100
sched_test.go
Normal file
100
sched_test.go
Normal file
@@ -0,0 +1,100 @@
|
||||
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
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user