Commit f8e1838c8ffcf942d5c9dccdd8dccf296f12714d

Parents: b9ffff4dff32ed4b8548f67e63251614c80f1e32

From: Moritz Poldrack <ich@moritz-poldrack.de>
Date: Wed May 19 12:44:55 2021 +0700

added pointerbased implementation

		

Stats

testdata/benchmarks/yenc.go +9/-0
testdata/benchmarks/yenc_test.go +34/-1

Changeset

 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
 			}
 		})
 	}