mirror of
https://github.com/golang/go
synced 2024-10-14 03:43:28 +00:00
runtime/race: add tests for maps with big keys/vals
With the recent GC changes large objects are handled somewhat differently. LGTM=khr R=khr CC=golang-codereviews https://golang.org/cl/114600043
This commit is contained in:
parent
3950655bb5
commit
9c0da2edfc
93
src/pkg/runtime/race/testdata/map_test.go
vendored
93
src/pkg/runtime/race/testdata/map_test.go
vendored
|
@ -238,3 +238,96 @@ func TestRaceMapAssignMultipleReturn(t *testing.T) {
|
|||
_ = x
|
||||
<-ch
|
||||
}
|
||||
|
||||
// BigKey and BigVal must be larger than 256 bytes,
|
||||
// so that compiler sets KindGCProg for them.
|
||||
type BigKey [1000]*int
|
||||
|
||||
type BigVal struct {
|
||||
x int
|
||||
y [1000]*int
|
||||
}
|
||||
|
||||
func TestRaceMapBigKeyAccess1(t *testing.T) {
|
||||
m := make(map[BigKey]int)
|
||||
var k BigKey
|
||||
ch := make(chan bool, 1)
|
||||
go func() {
|
||||
_ = m[k]
|
||||
ch <- true
|
||||
}()
|
||||
k[30] = new(int)
|
||||
<-ch
|
||||
}
|
||||
|
||||
func TestRaceMapBigKeyAccess2(t *testing.T) {
|
||||
m := make(map[BigKey]int)
|
||||
var k BigKey
|
||||
ch := make(chan bool, 1)
|
||||
go func() {
|
||||
_, _ = m[k]
|
||||
ch <- true
|
||||
}()
|
||||
k[30] = new(int)
|
||||
<-ch
|
||||
}
|
||||
|
||||
func TestRaceMapBigKeyInsert(t *testing.T) {
|
||||
m := make(map[BigKey]int)
|
||||
var k BigKey
|
||||
ch := make(chan bool, 1)
|
||||
go func() {
|
||||
m[k] = 1
|
||||
ch <- true
|
||||
}()
|
||||
k[30] = new(int)
|
||||
<-ch
|
||||
}
|
||||
|
||||
func TestRaceMapBigKeyDelete(t *testing.T) {
|
||||
m := make(map[BigKey]int)
|
||||
var k BigKey
|
||||
ch := make(chan bool, 1)
|
||||
go func() {
|
||||
delete(m, k)
|
||||
ch <- true
|
||||
}()
|
||||
k[30] = new(int)
|
||||
<-ch
|
||||
}
|
||||
|
||||
func TestRaceMapBigValInsert(t *testing.T) {
|
||||
m := make(map[int]BigVal)
|
||||
var v BigVal
|
||||
ch := make(chan bool, 1)
|
||||
go func() {
|
||||
m[1] = v
|
||||
ch <- true
|
||||
}()
|
||||
v.y[30] = new(int)
|
||||
<-ch
|
||||
}
|
||||
|
||||
func TestRaceMapBigValAccess1(t *testing.T) {
|
||||
m := make(map[int]BigVal)
|
||||
var v BigVal
|
||||
ch := make(chan bool, 1)
|
||||
go func() {
|
||||
v = m[1]
|
||||
ch <- true
|
||||
}()
|
||||
v.y[30] = new(int)
|
||||
<-ch
|
||||
}
|
||||
|
||||
func TestRaceMapBigValAccess2(t *testing.T) {
|
||||
m := make(map[int]BigVal)
|
||||
var v BigVal
|
||||
ch := make(chan bool, 1)
|
||||
go func() {
|
||||
v, _ = m[1]
|
||||
ch <- true
|
||||
}()
|
||||
v.y[30] = new(int)
|
||||
<-ch
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue