// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package race_test

import (
	"sync"
	"testing"
	"time"
)

func TestRacePool(t *testing.T) {
	// Pool randomly drops the argument on the floor during Put.
	// Repeat so that at least one iteration gets reuse.
	for i := 0; i < 10; i++ {
		c := make(chan int)
		p := &sync.Pool{New: func() any { return make([]byte, 10) }}
		x := p.Get().([]byte)
		x[0] = 1
		p.Put(x)
		go func() {
			y := p.Get().([]byte)
			y[0] = 2
			c <- 1
		}()
		x[0] = 3
		<-c
	}
}

func TestNoRacePool(t *testing.T) {
	for i := 0; i < 10; i++ {
		p := &sync.Pool{New: func() any { return make([]byte, 10) }}
		x := p.Get().([]byte)
		x[0] = 1
		p.Put(x)
		go func() {
			y := p.Get().([]byte)
			y[0] = 2
			p.Put(y)
		}()
		time.Sleep(100 * time.Millisecond)
		x = p.Get().([]byte)
		x[0] = 3
	}
}
