Browse Source

pkg/stringutil: add tests

For later "runner" cleanup

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
Gyuho Lee 7 years ago
parent
commit
f53c153fa9
3 changed files with 63 additions and 18 deletions
  1. 16 0
      pkg/stringutil/doc.go
  2. 17 18
      pkg/stringutil/rand.go
  3. 30 0
      pkg/stringutil/rand_test.go

+ 16 - 0
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

+ 17 - 18
pkg/stringutil/stringutil.go → 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))]

+ 30 - 0
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)
+}