1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
package escape
import (
"bytes"
"reflect"
"strings"
"testing"
)
var result []byte
func BenchmarkBytesEscapeNoEscapes(b *testing.B) {
buf := []byte(`no_escapes`)
for i := 0; i < b.N; i++ {
result = Bytes(buf)
}
}
func BenchmarkUnescapeNoEscapes(b *testing.B) {
buf := []byte(`no_escapes`)
for i := 0; i < b.N; i++ {
result = Unescape(buf)
}
}
func BenchmarkBytesEscapeMany(b *testing.B) {
tests := [][]byte{
[]byte("this is my special string"),
[]byte("a field w=i th == tons of escapes"),
[]byte("some,commas,here"),
}
for n := 0; n < b.N; n++ {
for _, test := range tests {
result = Bytes(test)
}
}
}
func BenchmarkUnescapeMany(b *testing.B) {
tests := [][]byte{
[]byte(`this\ is\ my\ special\ string`),
[]byte(`a\ field\ w\=i\ th\ \=\=\ tons\ of\ escapes`),
[]byte(`some\,commas\,here`),
}
for i := 0; i < b.N; i++ {
for _, test := range tests {
result = Unescape(test)
}
}
}
var boolResult bool
func BenchmarkIsEscaped(b *testing.B) {
tests := [][]byte{
[]byte(`no_escapes`),
[]byte(`a\ field\ w\=i\ th\ \=\=\ tons\ of\ escapes`),
[]byte(`some\,commas\,here`),
}
for i := 0; i < b.N; i++ {
for _, test := range tests {
boolResult = IsEscaped(test)
}
}
}
func BenchmarkAppendUnescaped(b *testing.B) {
tests := [][]byte{
[]byte(`this\ is\ my\ special\ string`),
[]byte(`a\ field\ w\=i\ th\ \=\=\ tons\ of\ escapes`),
[]byte(`some\,commas\,here`),
}
for i := 0; i < b.N; i++ {
result = nil
for _, test := range tests {
result = AppendUnescaped(result, test)
}
}
}
func TestUnescape(t *testing.T) {
tests := []struct {
in []byte
out []byte
}{
{
[]byte(nil),
[]byte(nil),
},
{
[]byte(""),
[]byte(nil),
},
{
[]byte("\\,\\\"\\ \\="),
[]byte(",\" ="),
},
{
[]byte("\\\\"),
[]byte("\\\\"),
},
{
[]byte("plain and simple"),
[]byte("plain and simple"),
},
}
for ii, tt := range tests {
got := Unescape(tt.in)
if !reflect.DeepEqual(got, tt.out) {
t.Errorf("[%d] Unescape(%#v) = %#v, expected %#v", ii, string(tt.in), string(got), string(tt.out))
}
}
}
func TestAppendUnescaped(t *testing.T) {
cases := strings.Split(strings.TrimSpace(`
normal
inv\alid
goo\"d
sp\ ace
\,\"\ \=
f\\\ x
`), "\n")
for _, c := range cases {
exp := Unescape([]byte(c))
got := AppendUnescaped(nil, []byte(c))
if !bytes.Equal(got, exp) {
t.Errorf("AppendUnescaped failed for %#q: got %#q, exp %#q", c, got, exp)
}
}
}
|