mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
An asked-for-in #go-nuts extension to quickly create a repeated
copy of a string or a byte array.
strings.Repeat("-", 50)
bytes.Repeat(b, 99)
R=rsc
https://golang.org/cl/155063
This commit is contained in:
parent
11c1aa9f6d
commit
37f71e8ad6
4 changed files with 79 additions and 0 deletions
|
|
@ -239,6 +239,19 @@ func Map(mapping func(rune int) int, s []byte) []byte {
|
|||
return b[0:nbytes];
|
||||
}
|
||||
|
||||
// Repeat returns a new byte array consisting of count copies of b.
|
||||
func Repeat(b []byte, count int) []byte {
|
||||
nb := make([]byte, len(b)*count);
|
||||
bp := 0;
|
||||
for i := 0; i < count; i++ {
|
||||
for j := 0; j < len(b); j++ {
|
||||
nb[bp] = b[j];
|
||||
bp++;
|
||||
}
|
||||
}
|
||||
return nb;
|
||||
}
|
||||
|
||||
// ToUpper returns a copy of the byte array s with all Unicode letters mapped to their upper case.
|
||||
func ToUpper(s []byte) []byte { return Map(unicode.ToUpper, s) }
|
||||
|
||||
|
|
|
|||
|
|
@ -361,3 +361,30 @@ func TestAddByte(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
type RepeatTest struct {
|
||||
in, out string;
|
||||
count int;
|
||||
}
|
||||
|
||||
var RepeatTests = []RepeatTest{
|
||||
RepeatTest{"", "", 0},
|
||||
RepeatTest{"", "", 1},
|
||||
RepeatTest{"", "", 2},
|
||||
RepeatTest{"-", "", 0},
|
||||
RepeatTest{"-", "-", 1},
|
||||
RepeatTest{"-", "----------", 10},
|
||||
RepeatTest{"abc ", "abc abc abc ", 3},
|
||||
}
|
||||
|
||||
func TestRepeat(t *testing.T) {
|
||||
for _, tt := range RepeatTests {
|
||||
tin := strings.Bytes(tt.in);
|
||||
tout := strings.Bytes(tt.out);
|
||||
a := Repeat(tin, tt.count);
|
||||
if !Equal(a, tout) {
|
||||
t.Errorf("Repeat(%q, %d) = %q; want %q", tin, tt.count, a, tout);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -188,6 +188,20 @@ func Map(mapping func(rune int) int, s string) string {
|
|||
return string(b[0:nbytes]);
|
||||
}
|
||||
|
||||
// Repeat returns a new string consisting of count copies of the string s.
|
||||
func Repeat(s string, count int) string {
|
||||
b := make([]byte, len(s)*count);
|
||||
bp := 0;
|
||||
for i := 0; i < count; i++ {
|
||||
for j := 0; j < len(s); j++ {
|
||||
b[bp] = s[j];
|
||||
bp++;
|
||||
}
|
||||
}
|
||||
return string(b);
|
||||
}
|
||||
|
||||
|
||||
// ToUpper returns a copy of the string s with all Unicode letters mapped to their upper case.
|
||||
func ToUpper(s string) string { return Map(unicode.ToUpper, s) }
|
||||
|
||||
|
|
|
|||
|
|
@ -336,3 +336,28 @@ func TestCaseConsistency(t *testing.T) {
|
|||
}
|
||||
*/
|
||||
}
|
||||
|
||||
type RepeatTest struct {
|
||||
in, out string;
|
||||
count int;
|
||||
}
|
||||
|
||||
var RepeatTests = []RepeatTest{
|
||||
RepeatTest{"", "", 0},
|
||||
RepeatTest{"", "", 1},
|
||||
RepeatTest{"", "", 2},
|
||||
RepeatTest{"-", "", 0},
|
||||
RepeatTest{"-", "-", 1},
|
||||
RepeatTest{"-", "----------", 10},
|
||||
RepeatTest{"abc ", "abc abc abc ", 3},
|
||||
}
|
||||
|
||||
func TestRepeat(t *testing.T) {
|
||||
for _, tt := range RepeatTests {
|
||||
a := Repeat(tt.in, tt.count);
|
||||
if !equal("Repeat(s)", a, tt.out, t) {
|
||||
t.Errorf("Repeat(%v, %d) = %v; want %v", tt.in, tt.count, a, tt.out);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue