1
0
mirror of https://github.com/fumiama/unibase2n.git synced 2026-06-05 00:32:47 +08:00
Files
unibase2n/decode_test.go
2022-10-03 19:52:27 +08:00

141 lines
3.0 KiB
Go

package unibase2n
import (
"bytes"
"math/bits"
"math/rand"
"testing"
"github.com/stretchr/testify/assert"
)
func TestEnDecode(t *testing.T) {
var buf [4096]byte
_, err := rand.Read(buf[:])
if err != nil {
t.Fatal(err)
}
assert.Equal(t, 1, bits.OnesCount8(8))
bs := Base{off: 0, til: 32768, bit: 1}
for ; bs.bit < 16; bs.bit++ {
for i := 1; i <= 4096; i++ {
e := bs.Encode(buf[:i])
d := bs.Decode(e)
if !bytes.Equal(d, buf[:i]) {
t.Fatal(bs.bit, i, e, d, buf[:i])
}
}
}
}
func TestDec128blk1(t *testing.T) {
var in, tmp [32]byte
_, err := rand.Read(in[:])
if err != nil {
t.Fatal(err)
}
n, _ := Base{bit: 1}.EncodeLen(32)
out := make([]byte, n)
enc16blk1(0x2333, in[:], out)
t.Log(out)
dec128blk1(uint128be{0x2333233323332333, 0x2333233323332333}, out[:], tmp[:])
assert.Equal(t, in, tmp)
}
func TestDec64blk2(t *testing.T) {
var in, tmp [32]byte
_, err := rand.Read(in[:])
if err != nil {
t.Fatal(err)
}
n, _ := Base{bit: 2}.EncodeLen(32)
out := make([]byte, n)
enc64blk2(0x2333233323332333, in[:], out)
t.Log(out)
dec64blk2(0x2333233323332333, out[:], tmp[:])
assert.Equal(t, in, tmp)
}
func TestDec32blk4(t *testing.T) {
var in, tmp [32]byte
_, err := rand.Read(in[:])
if err != nil {
t.Fatal(err)
}
n, _ := Base{bit: 4}.EncodeLen(32)
out := make([]byte, n)
enc32blk4(0x23332333, in[:], out)
t.Log(out)
dec32blk4(0x23332333, out[:], tmp[:])
assert.Equal(t, in, tmp)
}
func TestDec16blk8(t *testing.T) {
var in, tmp [32]byte
_, err := rand.Read(in[:])
if err != nil {
t.Fatal(err)
}
n, _ := Base{bit: 8}.EncodeLen(32)
out := make([]byte, n)
enc16blk8(0x1100, in[:], out)
t.Log(out)
dec16blk8(0x1100, out[:], tmp[:])
assert.Equal(t, in, tmp)
}
func TestDec128blk(t *testing.T) {
var in, tmp [32]byte
_, err := rand.Read(in[:])
if err != nil {
t.Fatal(err)
}
mask := uint128be{0x2333233323332333, 0x2333233323332333}
bs := Base{}
for _, bit := range [...]byte{3, 5, 6, 7, 9, 11, 13, 15} {
bs.bit = bit
n, _ := bs.EncodeLen(32)
out := make([]byte, n)
enc128blk(mask, bit, in[:], out)
t.Log(out)
dec128blk(mask, bit, out[:], tmp[:])
assert.Equal(t, in, tmp)
}
}
func TestDec64blk(t *testing.T) {
var in, tmp [32]byte
_, err := rand.Read(in[:])
if err != nil {
t.Fatal(err)
}
// 6
n, _ := Base{bit: 6}.EncodeLen(32)
out := make([]byte, n)
enc64blk(0x2333233323332333, 6, in[:], out)
t.Log(out)
dec64blk(0x2333233323332333, 6, out[:], tmp[:])
assert.Equal(t, in, tmp)
// 10
n, _ = Base{bit: 10}.EncodeLen(32)
out = make([]byte, n)
enc64blk(0x2333233323332333, 10, in[:], out)
t.Log(out)
dec64blk(0x2333233323332333, 10, out[:], tmp[:])
assert.Equal(t, in, tmp)
// 12
n, _ = Base{bit: 12}.EncodeLen(32)
out = make([]byte, n)
enc64blk(0x2333233323332333, 12, in[:], out)
t.Log(out)
dec64blk(0x2333233323332333, 12, out[:], tmp[:])
assert.Equal(t, in, tmp)
// 14
n, _ = Base{bit: 14}.EncodeLen(32)
out = make([]byte, n)
enc64blk(0x2333233323332333, 14, in[:], out)
t.Log(out)
dec64blk(0x2333233323332333, 14, out[:], tmp[:])
assert.Equal(t, in, tmp)
}