Ensure that keys generated by testing/quick are unique

Quick seed 21691 used to generate duplicate keys, 
which caused some Puts of values to overwrite other values,
causing spurious test failures.

Fixes #629.
master
Josh Bleecher Snyder 2016-12-28 14:09:56 -08:00
parent b9eb643780
commit 18ced60c94
1 changed files with 9 additions and 1 deletions

View File

@ -50,9 +50,17 @@ func (t testdata) Less(i, j int) bool { return bytes.Compare(t[i].Key, t[j].Key)
func (t testdata) Generate(rand *rand.Rand, size int) reflect.Value { func (t testdata) Generate(rand *rand.Rand, size int) reflect.Value {
n := rand.Intn(qmaxitems-1) + 1 n := rand.Intn(qmaxitems-1) + 1
items := make(testdata, n) items := make(testdata, n)
used := make(map[string]bool)
for i := 0; i < n; i++ { for i := 0; i < n; i++ {
item := &items[i] item := &items[i]
item.Key = randByteSlice(rand, 1, qmaxksize) // Ensure that keys are unique by looping until we find one that we have not already used.
for {
item.Key = randByteSlice(rand, 1, qmaxksize)
if !used[string(item.Key)] {
used[string(item.Key)] = true
break
}
}
item.Value = randByteSlice(rand, 0, qmaxvsize) item.Value = randByteSlice(rand, 0, qmaxvsize)
} }
return reflect.ValueOf(items) return reflect.ValueOf(items)