Merge pull request #13755 from ArtfulCoder/shufflestrings

ShuffleStrings uses a seeded rand object
This commit is contained in:
Mike Danese 2015-09-11 14:48:53 -07:00
commit 3758a01ced
3 changed files with 25 additions and 2 deletions

View File

@ -54,3 +54,11 @@ func Seed(seed int64) {
rng.rand = rand.New(rand.NewSource(seed)) rng.rand = rand.New(rand.NewSource(seed))
} }
// Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [0,n)
// from the default Source.
func Perm(n int) []int {
rng.Lock()
defer rng.Unlock()
return rng.rand.Perm(n)
}

View File

@ -17,6 +17,7 @@ limitations under the License.
package rand package rand
import ( import (
"math/rand"
"strings" "strings"
"testing" "testing"
) )
@ -35,3 +36,17 @@ func TestString(t *testing.T) {
} }
} }
} }
func TestPerm(t *testing.T) {
Seed(5)
rand.Seed(5)
for i := 1; i < 20; i++ {
actual := Perm(i)
expected := rand.Perm(i)
for j := 0; j < i; j++ {
if actual[j] != expected[j] {
t.Errorf("Perm call result is unexpected")
}
}
}
}

View File

@ -18,7 +18,7 @@ limitations under the License.
package slice package slice
import ( import (
"math/rand" utilrand "k8s.io/kubernetes/pkg/util/rand"
"sort" "sort"
) )
@ -41,7 +41,7 @@ func SortStrings(s []string) []string {
// order. It returns a new slice. // order. It returns a new slice.
func ShuffleStrings(s []string) []string { func ShuffleStrings(s []string) []string {
shuffled := make([]string, len(s)) shuffled := make([]string, len(s))
perm := rand.Perm(len(s)) perm := utilrand.Perm(len(s))
for i, j := range perm { for i, j := range perm {
shuffled[j] = s[i] shuffled[j] = s[i]
} }