]> Cypherpunks.ru repositories - gostls13.git/blob - src/math/rand/v2/race_test.go
math/rand/v2: rename various functions
[gostls13.git] / src / math / rand / v2 / race_test.go
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
5 package rand_test
6
7 import (
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.
15 func 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                         buf := make([]byte, 997)
27                         for j := 0; j < numCycles; j++ {
28                                 var seed int64
29                                 seed += int64(ExpFloat64())
30                                 seed += int64(Float32())
31                                 seed += int64(Float64())
32                                 seed += int64(IntN(Int()))
33                                 seed += int64(Int32N(Int32()))
34                                 seed += int64(Int64N(Int64()))
35                                 seed += int64(NormFloat64())
36                                 seed += int64(Uint32())
37                                 seed += int64(Uint64())
38                                 for _, p := range Perm(10) {
39                                         seed += int64(p)
40                                 }
41                                 Read(buf)
42                                 for _, b := range buf {
43                                         seed += int64(b)
44                                 }
45                                 Seed(int64(i*j) * seed)
46                         }
47                 }(i)
48         }
49 }