mirror of
https://github.com/samber/lo.git
synced 2025-09-26 20:11:13 +08:00
96 lines
1.7 KiB
Go
96 lines
1.7 KiB
Go
package lo
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestAttempt(t *testing.T) {
|
|
is := assert.New(t)
|
|
|
|
err := fmt.Errorf("failed")
|
|
|
|
iter1, err1 := Attempt(42, func(i int) error {
|
|
return nil
|
|
})
|
|
iter2, err2 := Attempt(42, func(i int) error {
|
|
if i == 5 {
|
|
return nil
|
|
}
|
|
|
|
return err
|
|
})
|
|
iter3, err3 := Attempt(2, func(i int) error {
|
|
if i == 5 {
|
|
return nil
|
|
}
|
|
|
|
return err
|
|
})
|
|
iter4, err4 := Attempt(0, func(i int) error {
|
|
if i < 42 {
|
|
return fmt.Errorf("failed")
|
|
}
|
|
|
|
return nil
|
|
})
|
|
|
|
is.Equal(iter1, 1)
|
|
is.Equal(err1, nil)
|
|
is.Equal(iter2, 6)
|
|
is.Equal(err2, nil)
|
|
is.Equal(iter3, 2)
|
|
is.Equal(err3, err)
|
|
is.Equal(iter4, 43)
|
|
is.Equal(err4, nil)
|
|
}
|
|
|
|
func TestDebounce(t *testing.T) {
|
|
f1 := func() {
|
|
println("1. Called once after 10ms when func stopped invoking!")
|
|
}
|
|
f2 := func() {
|
|
println("2. Called once after 10ms when func stopped invoking!")
|
|
}
|
|
f3 := func() {
|
|
println("3. Called once after 10ms when func stopped invoking!")
|
|
}
|
|
|
|
d1, _ := NewDebounce(10*time.Millisecond, f1)
|
|
|
|
// execute 3 times
|
|
for i := 0; i < 3; i++ {
|
|
for j := 0; j < 10; j++ {
|
|
d1()
|
|
}
|
|
time.Sleep(20 * time.Millisecond)
|
|
}
|
|
|
|
d2, _ := NewDebounce(10*time.Millisecond, f2)
|
|
|
|
// execute once because it is always invoked and only last invoke is worked after 100ms
|
|
for i := 0; i < 3; i++ {
|
|
for j := 0; j < 5; j++ {
|
|
d2()
|
|
}
|
|
time.Sleep(5 * time.Millisecond)
|
|
}
|
|
|
|
time.Sleep(10 * time.Millisecond)
|
|
|
|
// execute once because it is canceled after 200ms.
|
|
d3, cancel := NewDebounce(10*time.Millisecond, f3)
|
|
for i := 0; i < 3; i++ {
|
|
for j := 0; j < 10; j++ {
|
|
d3()
|
|
}
|
|
time.Sleep(20 * time.Millisecond)
|
|
if i == 0 {
|
|
cancel()
|
|
}
|
|
}
|
|
}
|