gecko/utils/wrappers/packing_test.go

154 lines
3.0 KiB
Go

// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package wrappers
import (
"bytes"
"testing"
)
func TestPackerByte(t *testing.T) {
p := Packer{MaxSize: 1}
p.PackByte(0x01)
if p.Errored() {
t.Fatal(p.Err)
}
if size := len(p.Bytes); size != 1 {
t.Fatalf("Packer.PackByte wrote %d byte(s) but expected %d byte(s)", size, 1)
}
expected := []byte{0x01}
if !bytes.Equal(p.Bytes, expected) {
t.Fatalf("Packer.PackByte wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
}
}
func TestPackerShort(t *testing.T) {
p := Packer{MaxSize: 2}
p.PackShort(0x0102)
if p.Errored() {
t.Fatal(p.Err)
}
if size := len(p.Bytes); size != 2 {
t.Fatalf("Packer.PackShort wrote %d byte(s) but expected %d byte(s)", size, 2)
}
expected := []byte{0x01, 0x02}
if !bytes.Equal(p.Bytes, expected) {
t.Fatalf("Packer.PackShort wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
}
}
func TestPackerInt(t *testing.T) {
p := Packer{MaxSize: 4}
p.PackInt(0x01020304)
if p.Errored() {
t.Fatal(p.Err)
}
if size := len(p.Bytes); size != 4 {
t.Fatalf("Packer.PackInt wrote %d byte(s) but expected %d byte(s)", size, 4)
}
expected := []byte{0x01, 0x02, 0x03, 0x04}
if !bytes.Equal(p.Bytes, expected) {
t.Fatalf("Packer.PackInt wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
}
}
func TestPackerLong(t *testing.T) {
p := Packer{MaxSize: 8}
p.PackLong(0x0102030405060708)
if p.Errored() {
t.Fatal(p.Err)
}
if size := len(p.Bytes); size != 8 {
t.Fatalf("Packer.PackLong wrote %d byte(s) but expected %d byte(s)", size, 8)
}
expected := []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}
if !bytes.Equal(p.Bytes, expected) {
t.Fatalf("Packer.PackLong wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
}
}
func TestPackerString(t *testing.T) {
p := Packer{MaxSize: 5}
p.PackStr("Ava")
if p.Errored() {
t.Fatal(p.Err)
}
if size := len(p.Bytes); size != 5 {
t.Fatalf("Packer.PackStr wrote %d byte(s) but expected %d byte(s)", size, 5)
}
expected := []byte{0x00, 0x03, 0x41, 0x76, 0x61}
if !bytes.Equal(p.Bytes, expected) {
t.Fatalf("Packer.PackStr wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
}
}
func TestPacker(t *testing.T) {
packer := Packer{
MaxSize: 3,
}
if packer.Errored() {
t.Fatalf("Packer has error %s", packer.Err)
}
packer.PackShort(17)
if len(packer.Bytes) != 2 {
t.Fatalf("Wrong byte length")
}
packer.PackShort(1)
if !packer.Errored() {
t.Fatalf("Packer should have error")
}
newPacker := Packer{
Bytes: packer.Bytes,
}
if newPacker.UnpackShort() != 17 {
t.Fatalf("Unpacked wrong value")
}
}
func TestPackBool(t *testing.T) {
p := Packer{MaxSize: 3}
p.PackBool(false)
p.PackBool(true)
p.PackBool(false)
if p.Errored() {
t.Fatal("should have been able to pack 3 bools")
}
p2 := Packer{Bytes: p.Bytes}
bool1, bool2, bool3 := p2.UnpackBool(), p2.UnpackBool(), p2.UnpackBool()
if p.Errored() {
t.Fatalf("errors while unpacking bools: %v", p.Errs)
}
if bool1 || !bool2 || bool3 {
t.Fatal("got back wrong values")
}
}