1// Copyright 2016 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package rand_test
6
7import (
8	. "math/rand/v2"
9	"sync"
10	"testing"
11)
12
13// TestConcurrent exercises the rand API concurrently, triggering situations
14// where the race detector is likely to detect issues.
15func TestConcurrent(t *testing.T) {
16	const (
17		numRoutines = 10
18		numCycles   = 10
19	)
20	var wg sync.WaitGroup
21	defer wg.Wait()
22	wg.Add(numRoutines)
23	for i := 0; i < numRoutines; i++ {
24		go func(i int) {
25			defer wg.Done()
26			var seed int64
27			for j := 0; j < numCycles; j++ {
28				seed += int64(ExpFloat64())
29				seed += int64(Float32())
30				seed += int64(Float64())
31				seed += int64(IntN(Int()))
32				seed += int64(Int32N(Int32()))
33				seed += int64(Int64N(Int64()))
34				seed += int64(NormFloat64())
35				seed += int64(Uint32())
36				seed += int64(Uint64())
37				for _, p := range Perm(10) {
38					seed += int64(p)
39				}
40			}
41			_ = seed
42		}(i)
43	}
44}
45