diff options
Diffstat (limited to 'src/pkg/strings/strings_test.go')
-rw-r--r-- | src/pkg/strings/strings_test.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/pkg/strings/strings_test.go b/src/pkg/strings/strings_test.go index 1171db224..ce77c5c2f 100644 --- a/src/pkg/strings/strings_test.go +++ b/src/pkg/strings/strings_test.go @@ -370,3 +370,48 @@ func TestRepeat(t *testing.T) { } } } + +func runesEqual(a, b []int) bool { + if len(a) != len(b) { + return false + } + for i, r := range a { + if r != b[i] { + return false + } + } + return true; +} + +type RunesTest struct { + in string; + out []int; + lossy bool; +} + +var RunesTests = []RunesTest{ + RunesTest{"", []int{}, false}, + RunesTest{" ", []int{32}, false}, + RunesTest{"ABC", []int{65, 66, 67}, false}, + RunesTest{"abc", []int{97, 98, 99}, false}, + RunesTest{"\u65e5\u672c\u8a9e", []int{26085, 26412, 35486}, false}, + RunesTest{"ab\x80c", []int{97, 98, 0xFFFD, 99}, true}, + RunesTest{"ab\xc0c", []int{97, 98, 0xFFFD, 99}, true}, +} + +func TestRunes(t *testing.T) { + for _, tt := range RunesTests { + a := Runes(tt.in); + if !runesEqual(a, tt.out) { + t.Errorf("Runes(%q) = %v; want %v", tt.in, a, tt.out); + continue; + } + if !tt.lossy { + // can only test reassembly if we didn't lose information + s := string(a); + if s != tt.in { + t.Errorf("string(Runes(%q)) = %x; want %x", tt.in, s, tt.in) + } + } + } +} |