@@ -5,6 +5,7 @@ import (
6 "sync/atomic"
6 "sync/atomic"
10 "github.com/stretchr/testify/require"
11 "github.com/stretchr/testify/require"
@@ -13,43 +14,47 @@ import (
13func TestLazySlice_Seq(t *testing.T) {
14func TestLazySlice_Seq(t *testing.T) {
14 t.Parallel()
15 t.Parallel()
17+ synctest.Test(t, func(t *testing.T) {
16− data := []string{"a", "b", "c"}
19+ data := []string{"a", "b", "c"}
17− s := NewLazySlice(func() []string {
20+ 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
21+ time.Sleep(10 * time.Millisecond) // Small delay to ensure loading happens
20− return data
22+ return data
23− var result []string
25+ var result []string
24− for v := range s.Seq() {
26+ for v := range s.Seq() {
25− result = append(result, v)
27+ result = append(result, v)
28− require.Equal(t, data, result)
30+ require.Equal(t, data, result)
31func TestLazySlice_SeqWaitsForLoading(t *testing.T) {
34func TestLazySlice_SeqWaitsForLoading(t *testing.T) {
32 t.Parallel()
35 t.Parallel()
36+ synctest.Test(t, func(t *testing.T) {
34− var loaded atomic.Bool
39+ var loaded atomic.Bool
35− data := []string{"x", "y", "z"}
40+ data := []string{"x", "y", "z"}
37− s := NewLazySlice(func() []string {
42+ s := NewLazySlice(func() []string {
38− // TODO: use synctest when new Go is out.
39− time.Sleep(100 * time.Millisecond)
43+ time.Sleep(100 * time.Millisecond)
40− loaded.Store(true)
44+ loaded.Store(true)
41− return data
45+ return data
44− require.False(t, loaded.Load(), "should not be loaded immediately")
48+ require.False(t, loaded.Load(), "should not be loaded immediately")
46− var result []string
50+ var result []string
47− for v := range s.Seq() {
51+ for v := range s.Seq() {
48− result = append(result, v)
52+ result = append(result, v)
51− require.True(t, loaded.Load(), "should be loaded after Seq")
55+ require.True(t, loaded.Load(), "should be loaded after Seq")
52− require.Equal(t, data, result)
56+ require.Equal(t, data, result)
55func TestLazySlice_EmptySlice(t *testing.T) {
60func TestLazySlice_EmptySlice(t *testing.T) {
@@ -70,22 +75,24 @@ func TestLazySlice_EmptySlice(t *testing.T) {
70func TestLazySlice_EarlyBreak(t *testing.T) {
75func TestLazySlice_EarlyBreak(t *testing.T) {
71 t.Parallel()
76 t.Parallel()
78+ synctest.Test(t, func(t *testing.T) {
73− data := []string{"a", "b", "c", "d", "e"}
80+ data := []string{"a", "b", "c", "d", "e"}
74− s := NewLazySlice(func() []string {
81+ 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
82+ time.Sleep(10 * time.Millisecond) // Small delay to ensure loading happens
77− return data
83+ return data
80− var result []string
86+ var result []string
81− for v := range s.Seq() {
87+ for v := range s.Seq() {
82− result = append(result, v)
88+ result = append(result, v)
83− if len(result) == 2 {
89+ if len(result) == 2 {
88− require.Equal(t, []string{"a", "b"}, result)
94+ require.Equal(t, []string{"a", "b"}, result)
91func TestSlice(t *testing.T) {
98func TestSlice(t *testing.T) {