mirror of
https://github.com/fumiama/unibase2n.git
synced 2026-06-05 00:32:47 +08:00
141 lines
3.0 KiB
Go
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)
|
|
}
|