-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathz85_test.go
97 lines (74 loc) · 2.24 KB
/
z85_test.go
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
package z85
import (
"math/rand"
"runtime"
"testing"
"github.com/stretchr/testify/require"
)
var (
benchmarkPlain = make([]byte, 1<<20)
benchmarkEncoded string
)
func init() {
rnd := rand.New(rand.NewSource(567537357543))
rnd.Read(benchmarkPlain)
benchmarkEncoded = EncodeToString(benchmarkPlain)
}
func TestEncodeString(t *testing.T) {
require.Equal(t, "", EncodeToString(nil), "unexpected encoded nil text")
require.Equal(t, "", EncodeToString([]byte{}), "unexpected encoded zero length text")
}
func TestDecodeString(t *testing.T) {
{
decoded, errDecode := DecodeString("")
require.NoError(t, errDecode, "unexpected decode error")
require.Equal(t, []byte(nil), decoded, "unexpected decoded empty text")
}
{
_, errDecode := DecodeString("1")
require.Error(t, errDecode, "expected decode error")
}
}
func TestDecodeTo(t *testing.T) {
plain := []byte{1}
encoded := make([]byte, EncodedLen(plain))
_, errEncode := EncodeTo(plain, encoded)
require.NoError(t, errEncode, "unexpected encode error")
decodedCap, errCap := DecodedCap(encoded)
require.NoError(t, errCap, "unexpected decoded cap error")
decoded := make([]byte, decodedCap+4)
decoded[len(decoded)-1] = 1
decodedLen, errDecode := DecodeTo(encoded, decoded)
require.NoError(t, errDecode, "unexpected decode error")
decoded = decoded[:decodedLen]
require.Equal(t, plain, decoded, "unexpected decoded text")
}
func TestEncodeDecodeString(t *testing.T) {
rnd := rand.New(rand.NewSource(567537357543))
for i := 0; i < 1000; i++ {
plain := make([]byte, 1+rnd.Intn(1000))
rnd.Read(plain)
n := (len(plain) + 4) / 4 * 5
encoded := EncodeToString(plain)
require.Equal(t, n, len(encoded), "unexpected encoded length")
decoded, errDecode := DecodeString(encoded)
require.NoError(t, errDecode, "unexpected decode error")
require.Equal(t, plain, decoded, "unexpected decoded text")
}
}
func BenchmarkEncodeToString(b *testing.B) {
var encoded string
for i := 0; i < b.N; i++ {
encoded = EncodeToString(benchmarkPlain)
}
runtime.KeepAlive(encoded)
}
func BenchmarkDecodeString(b *testing.B) {
var decoded []byte
var err error
for i := 0; i < b.N; i++ {
decoded, err = DecodeString(benchmarkEncoded)
}
runtime.KeepAlive(decoded)
runtime.KeepAlive(err)
}