mirror of
https://github.com/fumiama/go-base16384.git
synced 2026-06-05 00:32:52 +08:00
161 lines
3.2 KiB
Go
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)
|
|
})
|
|
}
|