From f53c153fa9648c08efe5fd8fd3173b5924586d25 Mon Sep 17 00:00:00 2001 From: Gyuho Lee Date: Sun, 8 Apr 2018 14:18:09 -0700 Subject: [PATCH] pkg/stringutil: add tests For later "runner" cleanup Signed-off-by: Gyuho Lee --- pkg/stringutil/doc.go | 16 +++++++++++ pkg/stringutil/{stringutil.go => rand.go} | 35 +++++++++++------------ pkg/stringutil/rand_test.go | 30 +++++++++++++++++++ 3 files changed, 63 insertions(+), 18 deletions(-) create mode 100644 pkg/stringutil/doc.go rename pkg/stringutil/{stringutil.go => rand.go} (64%) create mode 100644 pkg/stringutil/rand_test.go diff --git a/pkg/stringutil/doc.go b/pkg/stringutil/doc.go new file mode 100644 index 000000000..16d2b3834 --- /dev/null +++ b/pkg/stringutil/doc.go @@ -0,0 +1,16 @@ +// Copyright 2018 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package stringutil exports string utility functions. +package stringutil diff --git a/pkg/stringutil/stringutil.go b/pkg/stringutil/rand.go similarity index 64% rename from pkg/stringutil/stringutil.go rename to pkg/stringutil/rand.go index 44d637c20..a15b0de0c 100644 --- a/pkg/stringutil/stringutil.go +++ b/pkg/stringutil/rand.go @@ -1,4 +1,4 @@ -// Copyright 2016 The etcd Authors +// Copyright 2018 The etcd Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,41 +12,40 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package stringutil exports string utility functions. package stringutil -import "math/rand" - -const ( - chars = "abcdefghijklmnopqrstuvwxyz0123456789" +import ( + "math/rand" + "time" ) // UniqueStrings returns a slice of randomly generated unique strings. -func UniqueStrings(maxlen uint, n int) []string { - exist := make(map[string]bool) - ss := make([]string, 0) - +func UniqueStrings(slen uint, n int) (ss []string) { + exist := make(map[string]struct{}) + ss = make([]string, 0, n) for len(ss) < n { - s := randomString(maxlen) - if !exist[s] { - exist[s] = true + s := randString(slen) + if _, ok := exist[s]; !ok { ss = append(ss, s) + exist[s] = struct{}{} } } - return ss } // RandomStrings returns a slice of randomly generated strings. -func RandomStrings(maxlen uint, n int) []string { - ss := make([]string, 0) +func RandomStrings(slen uint, n int) (ss []string) { + ss = make([]string, 0, n) for i := 0; i < n; i++ { - ss = append(ss, randomString(maxlen)) + ss = append(ss, randString(slen)) } return ss } -func randomString(l uint) string { +const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + +func randString(l uint) string { + rand.Seed(time.Now().UnixNano()) s := make([]byte, l) for i := 0; i < int(l); i++ { s[i] = chars[rand.Intn(len(chars))] diff --git a/pkg/stringutil/rand_test.go b/pkg/stringutil/rand_test.go new file mode 100644 index 000000000..1b4a9dfd2 --- /dev/null +++ b/pkg/stringutil/rand_test.go @@ -0,0 +1,30 @@ +// Copyright 2018 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package stringutil + +import ( + "fmt" + "testing" +) + +func TestUniqueStrings(t *testing.T) { + ss := UniqueStrings(10, 50) + for i := 1; i < len(ss); i++ { + if ss[i-1] == ss[i] { + t.Fatalf("ss[i-1] %q == ss[i] %q", ss[i-1], ss[i]) + } + } + fmt.Println(ss) +}