c2047754c3
Compiler changes: * Change map assignment to use mapassign and assign value directly. * Change string iteration to use decoderune, faster for ASCII strings. * Change makeslice to take int, and use makeslice64 for larger values. * Add new noverflow field to hmap struct used for maps. Unresolved problems, to be fixed later: * Commented out test in go/types/sizes_test.go that doesn't compile. * Commented out reflect.TestStructOf test for padding after zero-sized field. Reviewed-on: https://go-review.googlesource.com/35231 gotools/: Updates for Go 1.8rc1. * Makefile.am (go_cmd_go_files): Add bug.go. (s-zdefaultcc): Write defaultPkgConfig. * Makefile.in: Rebuild. From-SVN: r244456
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
// 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)
|
|
}
|
|
}
|