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
|
diff --git a/testdata/benchmarks/yenc_test.go b/testdata/benchmarks/yenc_test.go
index ff87e968eb1a076b548f2a34a7cc05d85a7a7484..8445074298ce9d0212a7fa583a58d0009d25bf40 100644
--- a/testdata/benchmarks/yenc_test.go
+++ b/testdata/benchmarks/yenc_test.go
@@ -29,7 +29,7 @@ name string
fn func(*[2]byte)
}{
{"naive-pointer", YEncPtr},
- {"cgo", CYEnc},
+ // {"cgo", CYEnc},
}
for _, enc := range encoderPtr {
t.Run(enc.name, func(t *testing.T) {
@@ -46,13 +46,51 @@ }
}
func TestEncodingMultibyte(t *testing.T) {
- encoder := []struct {
+ encoder8byte := []struct {
name string
fn func([8]byte) []byte
}{
{"bootleg-simd", YEncBootlegSIMD},
}
- for _, enc := range encoder {
+ for _, enc := range encoder8byte {
+ t.Run(enc.name, func(t *testing.T) {
+ var input [8]byte
+ for i := 0; i < 256; i++ {
+ index := i % 8
+ input[index] = uint8(i)
+
+ if index == 7 {
+ for j := 0; j < 8; j++ {
+ demo := [8]byte{5, 19, 0, 20, 18, 128, 64}
+ res := enc.fn(demo)
+ var index int
+ for i := 0; i < len(demo); i++ {
+ if lookupTable[demo[i]].esc {
+ if res[index] != 0x3D {
+ t.Logf("Encoding of %x did not escape", demo[i])
+ t.Fail()
+ }
+ index++
+ }
+ if res[index] != lookupTable[demo[i]].bte {
+ t.Logf("Encoding of %x returned %x but %x was expected", demo[i], res[index], lookupTable[demo[i]].bte)
+ t.Fail()
+ }
+ index++
+ }
+ }
+ }
+ }
+ })
+ }
+
+ encoder16byte := []struct {
+ name string
+ fn func([16]byte) []byte
+ }{
+ {"simd", YEncSIMD},
+ }
+ for _, enc := range encoder16byte {
t.Run(enc.name, func(t *testing.T) {
var input [8]byte
for i := 0; i < 256; i++ {
@@ -61,12 +99,23 @@ input[index] = uint8(i)
if index == 7 {
for j := 0; j < 8; j++ {
- // TODO: add test
- _ = enc.fn([8]byte{5, 19, 0, 20, 18, 128, 64})
- /*if b != lookupTable[i].bte || esc != lookupTable[i].esc {
- t.Logf("Encoding of %x returned %x but %x was expected", i, b, lookupTable[i].bte)
- t.Fail()
- }*/
+ demo := [16]byte{5, 19, 0, 20, 18, 128, 64, 9, 52, 185, 222, 3, 255, 42}
+ res := enc.fn(demo)
+ var index int
+ for i := 0; i < len(demo); i++ {
+ if lookupTable[demo[i]].esc {
+ if res[index] != 0x3D {
+ t.Logf("Encoding of %x did not escape", demo[i])
+ t.Fail()
+ }
+ index++
+ }
+ if res[index] != lookupTable[demo[i]].bte {
+ t.Logf("Encoding of %x returned %x but %x was expected", demo[i], res[index], lookupTable[demo[i]].bte)
+ t.Fail()
+ }
+ index++
+ }
}
}
}
@@ -100,11 +149,11 @@ name string
fn func(*[2]byte)
}{
{"naive-pointer", YEncPtr},
- {"cgo", CYEnc},
+ // {"cgo", CYEnc},
}
for _, enc := range encoderPtr {
b.Run(enc.name, func(b *testing.B) {
- for i := 0; i < 256; i++ {
+ for i := 0; i < b.N; i++ {
b := [2]byte{0, uint8(i)}
enc.fn(&b)
_ = b
@@ -126,6 +175,22 @@ for _, enc := range encoder {
b.Run(enc.name, func(b *testing.B) {
for i := 0; i < b.N; i++ {
_, _ = enc.fn(19)
+ }
+ })
+ }
+ encoderPtr := []struct {
+ name string
+ fn func(*[2]byte)
+ }{
+ {"naive-pointer", YEncPtr},
+ // {"cgo", CYEnc},
+ }
+ for _, enc := range encoderPtr {
+ b.Run(enc.name, func(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ b := [2]byte{0, uint8(i)}
+ enc.fn(&b)
+ _ = b
}
})
}
|