...
Run Format

Source file src/math/rand/race_test.go

Documentation: math/rand

  // 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 rand
  
  import (
  	"sync"
  	"testing"
  )
  
  // TestConcurrent exercises the rand API concurrently, triggering situations
  // where the race detector is likely to detect issues.
  func TestConcurrent(t *testing.T) {
  	const (
  		numRoutines = 10
  		numCycles   = 10
  	)
  	var wg sync.WaitGroup
  	defer wg.Wait()
  	wg.Add(numRoutines)
  	for i := 0; i < numRoutines; i++ {
  		go func(i int) {
  			defer wg.Done()
  			buf := make([]byte, 997)
  			for j := 0; j < numCycles; j++ {
  				var seed int64
  				seed += int64(ExpFloat64())
  				seed += int64(Float32())
  				seed += int64(Float64())
  				seed += int64(Intn(Int()))
  				seed += int64(Int31n(Int31()))
  				seed += int64(Int63n(Int63()))
  				seed += int64(NormFloat64())
  				seed += int64(Uint32())
  				seed += int64(Uint64())
  				for _, p := range Perm(10) {
  					seed += int64(p)
  				}
  				Read(buf)
  				for _, b := range buf {
  					seed += int64(b)
  				}
  				Seed(int64(i*j) * seed)
  			}
  		}(i)
  	}
  }
  

View as plain text