diff --git a/api.go b/api.go index a85bd85..46c4df5 100644 --- a/api.go +++ b/api.go @@ -70,6 +70,12 @@ type AnyResult[T any] struct { } func AnyOf[T any](fs ...*Future[T]) *Future[AnyResult[T]] { + if len(fs) == 0 { + s := &state[AnyResult[T]]{} + s.set(AnyResult[T]{Index: -1}, nil) + return &Future[AnyResult[T]]{state: s} + } + var counter int32 var done uint32 var errIndex int32 = -1 diff --git a/api_test.go b/api_test.go index c74fc48..578c44a 100644 --- a/api_test.go +++ b/api_test.go @@ -249,6 +249,16 @@ func TestAnyOf(t *testing.T) { assert.Equal(t, nil, r.Err) } +func TestAnyOfEmpty(t *testing.T) { + fs := make([]*Future[int], 0) + f := AnyOf(fs...) + r, err := f.Get() + assert.NoError(t, err) + assert.Equal(t, -1, r.Index) + assert.Zero(t, r.Val) + assert.NoError(t, r.Err) +} + func TestAnyOfWhenAllErr(t *testing.T) { target := rand.Intn(10) vals := make([]int, 10)