@@ -5,6 +5,7 @@ import (
55 "sync"
66 "sync/atomic"
77 "testing"
8+ "testing/synctest"
89 "time"
910
1011 "github.com/stretchr/testify/require"
@@ -13,43 +14,47 @@ import (
1314func TestLazySlice_Seq(t *testing.T) {
1415 t.Parallel()
1516
16− data := []string{"a", "b", "c"}
17− s := NewLazySlice(func() []string {
18− // TODO: use synctest when new Go is out.
19− time.Sleep(10 * time.Millisecond) // Small delay to ensure loading happens
20− return data
21− })
17+ synctest.Test(t, func(t *testing.T) {
18+ t.Helper()
19+ data := []string{"a", "b", "c"}
20+ s := NewLazySlice(func() []string {
21+ time.Sleep(10 * time.Millisecond) // Small delay to ensure loading happens
22+ return data
23+ })
2224
23− var result []string
24− for v := range s.Seq() {
25− result = append(result, v)
26− }
25+ var result []string
26+ for v := range s.Seq() {
27+ result = append(result, v)
28+ }
2729
28− require.Equal(t, data, result)
30+ require.Equal(t, data, result)
31+ })
2932}
3033
3134func TestLazySlice_SeqWaitsForLoading(t *testing.T) {
3235 t.Parallel()
36+ synctest.Test(t, func(t *testing.T) {
37+ t.Helper()
3338
34− var loaded atomic.Bool
35− data := []string{"x", "y", "z"}
39+ var loaded atomic.Bool
40+ data := []string{"x", "y", "z"}
3641
37− s := NewLazySlice(func() []string {
38− // TODO: use synctest when new Go is out.
39− time.Sleep(100 * time.Millisecond)
40− loaded.Store(true)
41− return data
42− })
42+ s := NewLazySlice(func() []string {
43+ time.Sleep(100 * time.Millisecond)
44+ loaded.Store(true)
45+ return data
46+ })
4347
44− require.False(t, loaded.Load(), "should not be loaded immediately")
48+ require.False(t, loaded.Load(), "should not be loaded immediately")
4549
46− var result []string
47− for v := range s.Seq() {
48− result = append(result, v)
49− }
50+ var result []string
51+ for v := range s.Seq() {
52+ result = append(result, v)
53+ }
5054
51− require.True(t, loaded.Load(), "should be loaded after Seq")
52− require.Equal(t, data, result)
55+ require.True(t, loaded.Load(), "should be loaded after Seq")
56+ require.Equal(t, data, result)
57+ })
5358}
5459
5560func TestLazySlice_EmptySlice(t *testing.T) {
@@ -70,22 +75,24 @@ func TestLazySlice_EmptySlice(t *testing.T) {
7075func TestLazySlice_EarlyBreak(t *testing.T) {
7176 t.Parallel()
7277
73− data := []string{"a", "b", "c", "d", "e"}
74− s := NewLazySlice(func() []string {
75− // TODO: use synctest when new Go is out.
76− time.Sleep(10 * time.Millisecond) // Small delay to ensure loading happens
77− return data
78− })
78+ synctest.Test(t, func(t *testing.T) {
79+ t.Helper()
80+ data := []string{"a", "b", "c", "d", "e"}
81+ s := NewLazySlice(func() []string {
82+ time.Sleep(10 * time.Millisecond) // Small delay to ensure loading happens
83+ return data
84+ })
7985
80− var result []string
81− for v := range s.Seq() {
82− result = append(result, v)
83− if len(result) == 2 {
84− break
86+ var result []string
87+ for v := range s.Seq() {
88+ result = append(result, v)
89+ if len(result) == 2 {
90+ break
91+ }
8592 }
86− }
8793
88− require.Equal(t, []string{"a", "b"}, result)
94+ require.Equal(t, []string{"a", "b"}, result)
95+ })
8996}
9097
9198func TestSlice(t *testing.T) {