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
|
diff --git a/testdata/benchmarks/yenc.go b/testdata/benchmarks/yenc.go
index a5b476a8fe2ace8895bf75916ace4e40a5e91303..b08af7225c4db65693ad41f25b319bbc7bd6ae33 100644
--- a/testdata/benchmarks/yenc.go
+++ b/testdata/benchmarks/yenc.go
@@ -19,6 +19,15 @@
return input, escape
}
+func YEncPtr(input *[2]byte) {
+ input[1] += 42
+
+ if input[1] == 0x00 || input[1] == 0x0A || input[1] == 0x0D || input[1] == 0x3D {
+ input[1] += 0x40
+ input[0] = 0x3D
+ }
+}
+
func YEncHashmap(input byte) (byte, bool) {
inp := hashmap[input]
return inp.bte, inp.esc
diff --git a/testdata/benchmarks/yenc_test.go b/testdata/benchmarks/yenc_test.go
index 7745381e811e8a67521f52155a001e102787095a..8cceb3b9a4d24749ab1e53893891d1cc45105bc6 100644
--- a/testdata/benchmarks/yenc_test.go
+++ b/testdata/benchmarks/yenc_test.go
@@ -9,8 +9,8 @@ encoder := []struct {
name string
fn func(byte) (byte, bool)
}{
- {"naive", YEnc},
{"lookup-table", YEncLT},
+ {"naive", YEnc},
{"hashmap", YEncHashmap},
}
for _, enc := range encoder {
@@ -18,6 +18,24 @@ t.Run(enc.name, func(t *testing.T) {
for i := 0; i < 256; i++ {
b, esc := enc.fn(uint8(i))
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()
+ }
+ }
+ })
+ }
+ encoderPtr := []struct {
+ name string
+ fn func(*[2]byte)
+ }{
+ {"naive-pointer", YEncPtr},
+ }
+ for _, enc := range encoderPtr {
+ t.Run(enc.name, func(t *testing.T) {
+ for i := 0; i < 256; i++ {
+ b := [2]byte{0, uint8(i)}
+ enc.fn(&b)
+ if b[1] != lookupTable[i].bte || (b[0] == 0x3D) != lookupTable[i].esc {
t.Logf("Encoding of %x returned %x but %x was expected", i, b, lookupTable[i].bte)
t.Fail()
}
@@ -73,6 +91,21 @@ _ = []byte{'=', b}
} else {
_ = []byte{b}
}
+ }
+ })
+ }
+ encoderPtr := []struct {
+ name string
+ fn func(*[2]byte)
+ }{
+ {"naive-pointer", YEncPtr},
+ }
+ for _, enc := range encoderPtr {
+ b.Run(enc.name, func(b *testing.B) {
+ for i := 0; i < 256; i++ {
+ b := [2]byte{0, uint8(i)}
+ enc.fn(&b)
+ _ = b
}
})
}
|