package sync

import (
	"context"
	"testing"
	"time"
)

func TestWaitGroupContext(t *testing.T) {
	wg := NewWaitGroup()
	_ = t
	wg.Add(1)
	ctx, cancel := context.WithTimeout(context.TODO(), 1*time.Second)
	defer cancel()
	wg.WaitContext(ctx)
}

func TestWaitGroupReuse(t *testing.T) {
	wg := NewWaitGroup()
	defer func() {
		if wg.Waiters() != 0 {
			t.Fatal("lost goroutines")
		}
	}()

	wg.Add(1)
	defer wg.Done()
	ctx, cancel := context.WithTimeout(context.TODO(), 1*time.Second)
	defer cancel()
	wg.WaitContext(ctx)

	wg.Add(1)
	defer wg.Done()
	ctx, cancel = context.WithTimeout(context.TODO(), 1*time.Second)
	defer cancel()
	wg.WaitContext(ctx)
}