From 0bf413ab8e24fd0c19c14782278fc94aa2d0de18 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 30 Jun 2010 18:03:09 -0700 Subject: bytes, strings: add Replace This is the Replace I suggested in the review of CL 1114041. It's true that we already have regexp.MustCompile(regexp.QuoteMeta(old)).ReplaceAll(s, new) but because this Replace is doing a simpler job it is simpler to call and inherently more efficient. I will add the bytes implementation and tests to the CL after the strings one has been reviewed. R=r, cw CC=golang-dev https://golang.org/cl/1731048 --- src/pkg/bytes/bytes_test.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/pkg/bytes/bytes_test.go') diff --git a/src/pkg/bytes/bytes_test.go b/src/pkg/bytes/bytes_test.go index 2bea1737fd..26ff2d16f3 100644 --- a/src/pkg/bytes/bytes_test.go +++ b/src/pkg/bytes/bytes_test.go @@ -645,3 +645,39 @@ func TestTrimFunc(t *testing.T) { } } } + +type ReplaceTest struct { + in string + old, new string + n int + out string +} + +var ReplaceTests = []ReplaceTest{ + ReplaceTest{"hello", "l", "L", 0, "heLLo"}, + ReplaceTest{"hello", "x", "X", 0, "hello"}, + ReplaceTest{"", "x", "X", 0, ""}, + ReplaceTest{"radar", "r", "", 0, "ada"}, + ReplaceTest{"", "", "<>", 0, "<>"}, + ReplaceTest{"banana", "a", "<>", 0, "b<>n<>n<>"}, + ReplaceTest{"banana", "a", "<>", 1, "b<>nana"}, + ReplaceTest{"banana", "a", "<>", 1000, "b<>n<>n<>"}, + ReplaceTest{"banana", "an", "<>", 0, "b<><>a"}, + ReplaceTest{"banana", "ana", "<>", 0, "b<>na"}, + ReplaceTest{"banana", "", "<>", 0, "<>b<>a<>n<>a<>n<>a<>"}, + ReplaceTest{"banana", "", "<>", 10, "<>b<>a<>n<>a<>n<>a<>"}, + ReplaceTest{"banana", "", "<>", 6, "<>b<>a<>n<>a<>n<>a"}, + ReplaceTest{"banana", "", "<>", 5, "<>b<>a<>n<>a<>na"}, + ReplaceTest{"banana", "", "<>", 1, "<>banana"}, + ReplaceTest{"banana", "a", "a", 0, "banana"}, + ReplaceTest{"banana", "a", "a", 1, "banana"}, + ReplaceTest{"☺☻☹", "", "<>", 0, "<>☺<>☻<>☹<>"}, +} + +func TestReplace(t *testing.T) { + for _, tt := range ReplaceTests { + if s := string(Replace([]byte(tt.in), []byte(tt.old), []byte(tt.new), tt.n)); s != tt.out { + t.Errorf("Replace(%q, %q, %q, %d) = %q, want %q", tt.in, tt.old, tt.new, tt.n, s, tt.out) + } + } +} -- cgit v1.3