diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2016-08-14 00:39:44 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2016-08-14 00:41:30 +0900 |
| commit | 1d4057c20907b7d263d6f2b8cb4350a024859dfe (patch) | |
| tree | adb1edd9c4f1806cd65f8c5117645c22618c7301 /src/util/chars_test.go | |
| parent | 822b86942c4ffb0dbf7fd096584d2970675f3ebc (diff) | |
| download | fzf-1d4057c20907b7d263d6f2b8cb4350a024859dfe.tar.gz | |
[perf] Avoid allocating rune array for ascii string
In the best case (all ascii), this reduces the memory footprint by 60%
and the response time by 15% to 20%. In the worst case (every line has
non-ascii characters), 3 to 4% overhead is observed.
Diffstat (limited to 'src/util/chars_test.go')
| -rw-r--r-- | src/util/chars_test.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/util/chars_test.go b/src/util/chars_test.go new file mode 100644 index 00000000..e42cfb7c --- /dev/null +++ b/src/util/chars_test.go @@ -0,0 +1,36 @@ +package util + +import "testing" + +func TestToCharsNil(t *testing.T) { + bs := Chars{bytes: []byte{}} + if bs.bytes == nil || bs.runes != nil { + t.Error() + } + rs := RunesToChars([]rune{}) + if rs.bytes != nil || rs.runes == nil { + t.Error() + } +} + +func TestToCharsAscii(t *testing.T) { + chars := ToChars([]byte("foobar")) + if chars.ToString() != "foobar" || chars.runes != nil { + t.Error() + } +} + +func TestCharsLength(t *testing.T) { + chars := ToChars([]byte("\tabc한글 ")) + if chars.Length() != 8 || chars.TrimLength() != 5 { + t.Error() + } +} + +func TestCharsToString(t *testing.T) { + text := "\tabc한글 " + chars := ToChars([]byte(text)) + if chars.ToString() != text { + t.Error() + } +} |
