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
源文雨 369cf02def finish arm64 decode
name            old time/op    new time/op     delta
EncodeTo/16-8     10.6ns ± 0%     10.4ns ± 0%    -2.07%  (p=0.008 n=5+5)
EncodeTo/256-8    80.8ns ± 0%     55.7ns ± 0%   -31.11%  (p=0.008 n=5+5)
EncodeTo/4K-8     1.21µs ± 0%     0.82µs ± 0%   -32.67%  (p=0.016 n=4+5)
EncodeTo/32K-8    9.64µs ± 0%     6.47µs ± 0%   -32.90%  (p=0.008 n=5+5)
DecodeTo/16-8     9.79ns ± 0%    26.02ns ± 0%  +165.85%  (p=0.016 n=4+5)
DecodeTo/256-8    80.9ns ± 0%    111.6ns ± 0%   +37.98%  (p=0.008 n=5+5)
DecodeTo/4K-8     1.22µs ± 0%     1.17µs ± 0%    -3.73%  (p=0.008 n=5+5)
DecodeTo/32K-8    9.71µs ± 1%     8.80µs ± 1%    -9.37%  (p=0.008 n=5+5)
Encoder/16-8      76.5ns ± 0%     76.5ns ± 0%      ~     (p=0.810 n=5+5)
Encoder/256-8      356ns ± 0%      291ns ± 0%   -18.22%  (p=0.008 n=5+5)
Encoder/4K-8      4.05µs ± 0%     3.70µs ± 0%    -8.76%  (p=0.008 n=5+5)
Encoder/32K-8     34.1µs ± 0%     29.2µs ± 0%   -14.30%  (p=0.008 n=5+5)
Decoder/16-8       205ns ± 0%      207ns ± 0%    +1.08%  (p=0.008 n=5+5)
Decoder/256-8      262ns ± 0%      244ns ± 1%    -6.94%  (p=0.008 n=5+5)
Decoder/4K-8      1.49µs ± 0%     1.12µs ± 0%   -24.87%  (p=0.008 n=5+5)
Decoder/32K-8     11.0µs ± 0%      8.0µs ± 0%   -27.00%  (p=0.008 n=5+5)

name            old speed      new speed       delta
EncodeTo/16-8   1.50GB/s ± 0%   1.54GB/s ± 0%    +2.11%  (p=0.008 n=5+5)
EncodeTo/256-8  3.17GB/s ± 0%   4.60GB/s ± 0%   +45.15%  (p=0.008 n=5+5)
EncodeTo/4K-8   3.37GB/s ± 0%   5.01GB/s ± 0%   +48.51%  (p=0.008 n=5+5)
EncodeTo/32K-8  3.40GB/s ± 0%   5.06GB/s ± 0%   +49.02%  (p=0.008 n=5+5)
DecodeTo/16-8   2.25GB/s ± 0%   0.85GB/s ± 0%   -62.39%  (p=0.016 n=4+5)
DecodeTo/256-8  3.66GB/s ± 0%   2.65GB/s ± 0%   -27.54%  (p=0.008 n=5+5)
DecodeTo/4K-8   3.84GB/s ± 0%   3.99GB/s ± 0%    +3.87%  (p=0.008 n=5+5)
DecodeTo/32K-8  3.86GB/s ± 1%   4.26GB/s ± 1%   +10.33%  (p=0.008 n=5+5)
Encoder/16-8     209MB/s ± 0%    209MB/s ± 0%      ~     (p=0.802 n=5+5)
Encoder/256-8    720MB/s ± 0%    880MB/s ± 0%   +22.28%  (p=0.008 n=5+5)
Encoder/4K-8    1.01GB/s ± 0%   1.11GB/s ± 0%    +9.60%  (p=0.008 n=5+5)
Encoder/32K-8    962MB/s ± 0%   1122MB/s ± 0%   +16.69%  (p=0.008 n=5+5)
Decoder/16-8    78.1MB/s ± 0%   77.3MB/s ± 0%    -1.08%  (p=0.008 n=5+5)
Decoder/256-8    977MB/s ± 0%   1050MB/s ± 1%    +7.47%  (p=0.008 n=5+5)
Decoder/4K-8    2.76GB/s ± 0%   3.67GB/s ± 0%   +33.10%  (p=0.008 n=5+5)
Decoder/32K-8   2.98GB/s ± 0%   4.08GB/s ± 0%   +36.98%  (p=0.008 n=5+5)

name            old alloc/op   new alloc/op    delta
EncodeTo/16-8      0.00B           0.00B           ~     (all equal)
EncodeTo/256-8     0.00B           0.00B           ~     (all equal)
EncodeTo/4K-8      0.00B           0.00B           ~     (all equal)
EncodeTo/32K-8     0.00B           0.00B           ~     (all equal)
DecodeTo/16-8      0.00B          48.00B ± 0%     +Inf%  (p=0.008 n=5+5)
DecodeTo/256-8     0.00B         576.00B ± 0%     +Inf%  (p=0.008 n=5+5)
DecodeTo/4K-8      0.00B        6144.00B ± 0%     +Inf%  (p=0.008 n=5+5)
DecodeTo/32K-8     0.00B       49152.00B ± 0%     +Inf%  (p=0.008 n=5+5)
Encoder/16-8       24.0B ± 0%      24.0B ± 0%      ~     (all equal)
Encoder/256-8       472B ± 0%        24B ± 0%   -94.92%  (p=0.008 n=5+5)
Encoder/4K-8       24.0B ± 0%      24.0B ± 0%      ~     (all equal)
Encoder/32K-8     41.0kB ± 0%      0.0kB ± 0%   -99.94%  (p=0.008 n=5+5)
Decoder/16-8      1.39kB ± 0%     1.39kB ± 0%      ~     (all equal)
Decoder/256-8     1.39kB ± 0%     1.39kB ± 0%      ~     (all equal)
Decoder/4K-8      4.98kB ± 0%     4.98kB ± 0%      ~     (all equal)
Decoder/32K-8     41.1kB ± 0%     41.1kB ± 0%      ~     (all equal)

name            old allocs/op  new allocs/op   delta
EncodeTo/16-8       0.00            0.00           ~     (all equal)
EncodeTo/256-8      0.00            0.00           ~     (all equal)
EncodeTo/4K-8       0.00            0.00           ~     (all equal)
EncodeTo/32K-8      0.00            0.00           ~     (all equal)
DecodeTo/16-8       0.00            1.00 ± 0%     +Inf%  (p=0.008 n=5+5)
DecodeTo/256-8      0.00            1.00 ± 0%     +Inf%  (p=0.008 n=5+5)
DecodeTo/4K-8       0.00            1.00 ± 0%     +Inf%  (p=0.008 n=5+5)
DecodeTo/32K-8      0.00            1.00 ± 0%     +Inf%  (p=0.008 n=5+5)
Encoder/16-8        1.00 ± 0%       1.00 ± 0%      ~     (all equal)
Encoder/256-8       2.00 ± 0%       1.00 ± 0%   -50.00%  (p=0.008 n=5+5)
Encoder/4K-8        1.00 ± 0%       1.00 ± 0%      ~     (all equal)
Encoder/32K-8       2.00 ± 0%       1.00 ± 0%   -50.00%  (p=0.008 n=5+5)
Decoder/16-8        3.00 ± 0%       3.00 ± 0%      ~     (all equal)
Decoder/256-8       3.00 ± 0%       3.00 ± 0%      ~     (all equal)
Decoder/4K-8        3.00 ± 0%       3.00 ± 0%      ~     (all equal)
Decoder/32K-8       3.00 ± 0%       3.00 ± 0%      ~     (all equal)
2022-12-14 01:14:03 +08:00

239 lines
5.3 KiB
Go

package base14
import (
"bytes"
"encoding/hex"
"io"
"math/rand"
"testing"
"github.com/stretchr/testify/assert"
)
func TestBase14(t *testing.T) {
assert.Equal(t, "蜮嘎惢磦筢貊豔耹嫹桊涖犧蟦癎摖壥禦籋萷犸粹瘛榞梄螢圓因苧璡屨灇炀瞸瘊暍严帉戀㴃", EncodeString("一个测试293大大的啊定位为恶的我284的我……#@%@%@"))
assert.Equal(t, "婀㴁", EncodeString("1"))
assert.Equal(t, "婌渀㴂", EncodeString("12"))
assert.Equal(t, "婌焰㴃", EncodeString("123"))
assert.Equal(t, "婌焳帀㴄", EncodeString("1234"))
assert.Equal(t, "婌焳廔㴅", EncodeString("12345"))
assert.Equal(t, "婌焳廔萀㴆", EncodeString("123456"))
assert.Equal(t, "婌焳廔萷", EncodeString("1234567"))
assert.Equal(t, "婌焳廔萷尀㴁", EncodeString("12345678"))
buf := make([]byte, 4096)
for i := 1; i < 4096; i++ {
rand.Read(buf[:i])
out := Decode(Encode(buf[:i]))
if !assert.Equal(t, hex.EncodeToString(buf[:i]), hex.EncodeToString(out)) {
t.Fatal()
}
}
}
func TestEncoder(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))
for i := 0; i <= 1024*1024; i += rand.Intn(128) * 7 {
e := NewEncoder(bytes.NewReader(buf[:i]))
_, err = io.Copy(w, e)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(Encode(buf[:i]), w.Bytes()) {
t.Fail()
}
w.Reset()
}
}
func TestBufferedEncoder(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))
for i := 0; i <= 1024*1024; i += rand.Intn(128) * 7 {
e := NewBufferedEncoder(buf[:i])
_, err = io.Copy(w, e)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(Encode(buf[:i]), w.Bytes()) {
t.Fail()
}
w.Reset()
}
}
func TestDecoder(t *testing.T) {
buf := make([]byte, 1024*1024+1)
_, err := rand.Read(buf)
if err != nil {
t.Fatal(err)
}
encd := Encode(buf)
w := bytes.NewBuffer(make([]byte, 0, 1024*1024+1))
for i := 0; i <= 1024*1024; i += rand.Intn(128) * 8 {
d := NewDecoder(bytes.NewReader(encd[:i]))
_, err = io.Copy(w, d)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(buf[:i/8*7], w.Bytes()) {
t.Fail()
}
w.Reset()
}
}
func TestBufferedDecoder(t *testing.T) {
buf := make([]byte, 1024*1024+1)
_, err := rand.Read(buf)
if err != nil {
t.Fatal(err)
}
encd := Encode(buf)
w := bytes.NewBuffer(make([]byte, 0, 1024*1024+1))
for i := 0; i <= 1024*1024; i += rand.Intn(128) * 8 {
d := NewBufferedDecoder(encd[:i])
_, err = io.Copy(w, d)
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(buf[:i/8*7], w.Bytes()) {
t.Fail()
}
w.Reset()
}
}
func benchEncode(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 benchDecode(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)
benchEncode(b, data)
})
b.Run("256", func(b *testing.B) {
data := make([]byte, 256)
benchEncode(b, data)
})
b.Run("4K", func(b *testing.B) {
data := make([]byte, 1024*4)
benchEncode(b, data)
})
b.Run("32K", func(b *testing.B) {
data := make([]byte, 1024*32)
benchEncode(b, data)
})
}
func BenchmarkDecodeTo(b *testing.B) {
b.Run("16", func(b *testing.B) {
data := make([]byte, 16)
benchDecode(b, data)
})
b.Run("256", func(b *testing.B) {
data := make([]byte, 256)
benchDecode(b, data)
})
b.Run("4K", func(b *testing.B) {
data := make([]byte, 4096)
benchDecode(b, data)
})
b.Run("32K", func(b *testing.B) {
data := make([]byte, 1024*32)
benchDecode(b, data)
})
}
func benchEncoder(b *testing.B, cnt int64) {
enc := NewEncoder(rand.New(rand.NewSource(0)))
buf := bytes.NewBuffer(make([]byte, 0, cnt))
b.SetBytes(cnt)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, _ = io.CopyN(buf, enc, cnt)
buf.Reset()
}
}
func benchDecoder(b *testing.B, cnt int64) {
enc := NewEncoder(rand.New(rand.NewSource(0)))
buf := bytes.NewBuffer(make([]byte, 0, cnt))
_, err := io.CopyN(buf, enc, cnt)
if err != nil {
panic(err)
}
buf2 := bytes.NewBuffer(make([]byte, 0, cnt))
b.SetBytes(cnt)
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, _ = io.Copy(buf2, NewDecoder(bytes.NewReader(buf.Bytes())))
buf2.Reset()
}
}
func BenchmarkEncoder(b *testing.B) {
b.Run("16", func(b *testing.B) {
benchEncoder(b, 16)
})
b.Run("256", func(b *testing.B) {
benchEncoder(b, 256)
})
b.Run("4K", func(b *testing.B) {
benchEncoder(b, 1024*4)
})
b.Run("32K", func(b *testing.B) {
benchEncoder(b, 1024*32)
})
}
func BenchmarkDecoder(b *testing.B) {
b.Run("16", func(b *testing.B) {
benchDecoder(b, 16)
})
b.Run("256", func(b *testing.B) {
benchDecoder(b, 256)
})
b.Run("4K", func(b *testing.B) {
benchDecoder(b, 1024*4)
})
b.Run("32K", func(b *testing.B) {
benchDecoder(b, 1024*32)
})
}