80 lines
2.4 KiB
Go
80 lines
2.4 KiB
Go
package rle_test
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/inkyblackness/hacked/ss1/serial/rle"
|
|
)
|
|
|
|
func TestCompressEmptyArrayResultsInTerminator(t *testing.T) {
|
|
writer := bytes.NewBuffer(nil)
|
|
err := rle.Compress(writer, nil, nil)
|
|
assert.Nil(t, err, "no error expected")
|
|
assert.Equal(t, []byte{0x80, 0x00, 0x00}, writer.Bytes())
|
|
}
|
|
|
|
func TestCompressOfZeroBytesLong(t *testing.T) {
|
|
writer := bytes.NewBuffer(nil)
|
|
input := make([]byte, 1000)
|
|
input[len(input)-1] = 1
|
|
err := rle.Compress(writer, input, nil)
|
|
assert.Nil(t, err, "no error expected")
|
|
assert.Equal(t, []byte{0x80, 0xE7, 0x03, 0x01, 0x01, 0x80, 0x0, 0x0}, writer.Bytes())
|
|
}
|
|
|
|
func TestCompressOfEqualBytesLong(t *testing.T) {
|
|
writer := bytes.NewBuffer(nil)
|
|
input := make([]byte, 1000)
|
|
for i := 0; i < len(input); i++ {
|
|
input[i] = 0xAA
|
|
}
|
|
input[len(input)-1] = 1
|
|
err := rle.Compress(writer, input, nil)
|
|
assert.Nil(t, err, "no error expected")
|
|
assert.Equal(t, []byte{0x80, 0xE7, 0xC3, 0xAA, 0x01, 0x01, 0x80, 0x0, 0x0}, writer.Bytes())
|
|
}
|
|
|
|
func TestCompressOfEqualBytesShort(t *testing.T) {
|
|
writer := bytes.NewBuffer(nil)
|
|
input := make([]byte, 40)
|
|
for i := 0; i < len(input); i++ {
|
|
input[i] = 0xAA
|
|
}
|
|
input[len(input)-1] = 1
|
|
err := rle.Compress(writer, input, nil)
|
|
assert.Nil(t, err, "no error expected")
|
|
assert.Equal(t, []byte{0x00, 0x27, 0xAA, 0x01, 0x01, 0x80, 0x0, 0x0}, writer.Bytes())
|
|
}
|
|
|
|
func TestCompressOfRandomBytesShort(t *testing.T) {
|
|
writer := bytes.NewBuffer(nil)
|
|
input := make([]byte, 10)
|
|
for i := 0; i < len(input); i++ {
|
|
input[i] = byte(i)
|
|
}
|
|
err := rle.Compress(writer, input, nil)
|
|
assert.Nil(t, err, "no error expected")
|
|
assert.Equal(t, []byte{0x0A, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x80, 0x00, 0x00}, writer.Bytes())
|
|
}
|
|
|
|
func TestCompressWithIdenticalReference(t *testing.T) {
|
|
writer := bytes.NewBuffer(nil)
|
|
input := []byte{0xAA, 0xBB, 0xCC, 0xDD}
|
|
reference := input
|
|
err := rle.Compress(writer, input, reference)
|
|
assert.Nil(t, err, "no error expected")
|
|
assert.Equal(t, []byte{0x80, 0x00, 0x00}, writer.Bytes())
|
|
}
|
|
|
|
func TestCompressWithPartlyIdenticalReference(t *testing.T) {
|
|
writer := bytes.NewBuffer(nil)
|
|
input := []byte{0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}
|
|
reference := []byte{0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x0A}
|
|
err := rle.Compress(writer, input, reference)
|
|
assert.Nil(t, err, "no error expected")
|
|
assert.Equal(t, []byte{0x85, 0x01, 0xFF, 0x80, 0x00, 0x00}, writer.Bytes())
|
|
}
|