1
0
mirror of https://github.com/fumiama/go-base16384.git synced 2026-06-05 00:32:52 +08:00
Files
go-base16384/base14_test.go
2022-04-22 11:12:37 +08:00

161 lines
3.2 KiB
Go

package base14
import (
"bytes"
"io"
"math/rand"
"testing"
"github.com/stretchr/testify/assert"
)
func TestBase14(t *testing.T) {
teststr := "一个测试293大大的啊定位为恶的我284的我……#@%@%@"
es := EncodeString(teststr)
assert.Equal(t, "蜮嘎惢磦筢貊豔耹嫹桊涖犧蟦癎摖壥禦籋萷犸粹瘛榞梄螢圓因苧璡屨灇炀瞸瘊暍严帉戀㴃", es)
assert.Equal(t, teststr, DecodeString(es))
}
func TestEncoder(t *testing.T) {
buf := make([]byte, 42242141)
_, err := rand.Read(buf)
if err != nil {
t.Fatal(err)
}
e := NewEncoder(bytes.NewReader(buf))
w := bytes.NewBuffer(make([]byte, 0, 42242150))
_, err = io.Copy(w, e)
if err != nil {
t.Fatal(err)
}
out := w.Bytes()
assert.Equal(t, 48276736, w.Len())
d := Decode(out)
t.Log(len(out))
assert.Equal(t, buf, d)
}
func TestBufferedEncoder(t *testing.T) {
buf := make([]byte, 1024*1024+1)
_, err := rand.Read(buf)
if err != nil {
t.Fatal(err)
}
e := NewBufferedEncoder(buf)
w := bytes.NewBuffer(make([]byte, 0, 1024*1024+16))
_, err = io.Copy(w, e)
if err != nil {
t.Fatal(err)
}
out := w.Bytes()
t.Log(w.Len())
d := Decode(out)
if !bytes.Equal(buf, d) {
t.Fail()
}
}
func TestDecoder(t *testing.T) {
buf := make([]byte, 1024*1024+1)
_, err := rand.Read(buf)
if err != nil {
t.Fatal(err)
}
w := bytes.NewBuffer(make([]byte, 0, 1024*1024+1))
d := NewDecoder(bytes.NewReader(Encode(buf)))
_, err = io.Copy(w, d)
if err != nil {
t.Fatal(err)
}
t.Log(w.Len())
if !bytes.Equal(buf, w.Bytes()) {
t.Fail()
}
}
func TestBufferedDecoder(t *testing.T) {
buf := make([]byte, 1024*1024+1)
_, err := rand.Read(buf)
if err != nil {
t.Fatal(err)
}
w := bytes.NewBuffer(make([]byte, 0, 1024*1024+1))
d := NewBufferedDecoder(Encode(buf))
_, err = io.Copy(w, d)
if err != nil {
t.Fatal(err)
}
t.Log(w.Len())
if !bytes.Equal(buf, w.Bytes()) {
t.Fail()
}
}
func benchEncrypt(b *testing.B, data []byte) {
_, err := rand.Read(data)
if err != nil {
panic(err)
}
buf := make([]byte, EncodeLen(len(data)))
b.SetBytes(int64(len(data)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = EncodeTo(data, buf)
}
}
func benchDecrypt(b *testing.B, data []byte) {
_, err := rand.Read(data)
if err != nil {
panic(err)
}
buf := make([]byte, EncodeLen(len(data)))
err = EncodeTo(data, buf)
if err != nil {
panic(err)
}
b.SetBytes(int64(len(buf)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
_ = DecodeTo(buf, data)
}
}
func BenchmarkEncodeTo(b *testing.B) {
b.Run("16", func(b *testing.B) {
data := make([]byte, 16)
benchEncrypt(b, data)
})
b.Run("256", func(b *testing.B) {
data := make([]byte, 256)
benchEncrypt(b, data)
})
b.Run("4K", func(b *testing.B) {
data := make([]byte, 1024*4)
benchEncrypt(b, data)
})
b.Run("32K", func(b *testing.B) {
data := make([]byte, 1024*32)
benchEncrypt(b, data)
})
}
func BenchmarkDecodeTo(b *testing.B) {
b.Run("16", func(b *testing.B) {
data := make([]byte, 16)
benchDecrypt(b, data)
})
b.Run("256", func(b *testing.B) {
data := make([]byte, 256)
benchDecrypt(b, data)
})
b.Run("4K", func(b *testing.B) {
data := make([]byte, 4096)
benchDecrypt(b, data)
})
b.Run("32K", func(b *testing.B) {
data := make([]byte, 1024*32)
benchDecrypt(b, data)
})
}