Commit fdf299fa88b8aa871d0afc435a2055bee6ba5c17

Parents: 335947ccad0799b6f62dd9e561e205737515e44b

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

added simd and bootleg-simd tests

		

Stats

testdata/benchmarks/yenc_test.go +76/-11

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