95 lines
2.7 KiB
Go
95 lines
2.7 KiB
Go
package compression_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/inkyblackness/hacked/ss1/content/movie/internal/compression"
|
|
)
|
|
|
|
func TestTilePaletteKeyNullValueHasNoColorsSet(t *testing.T) {
|
|
var key compression.TilePaletteKey
|
|
for color := 0; color < 256; color++ {
|
|
assert.False(t, key.HasColor(byte(color)), "color set although should not %v", color)
|
|
}
|
|
}
|
|
|
|
func TestTilePaletteKeyCanMarkSingleColors(t *testing.T) {
|
|
for color := 0; color < 256; color++ {
|
|
var key compression.TilePaletteKey
|
|
key.UseColor(byte(color))
|
|
assert.True(t, key.HasColor(byte(color)), "color not set %v", color)
|
|
for otherColor := 0; otherColor < 256; otherColor++ {
|
|
if otherColor != color {
|
|
assert.False(t, key.HasColor(byte(otherColor)),
|
|
"color %v set although should not for %v", otherColor, color)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTilePaletteKeyCanMarkAllColors(t *testing.T) {
|
|
var key compression.TilePaletteKey
|
|
for color := 0; color < 256; color++ {
|
|
key.UseColor(byte(color))
|
|
}
|
|
for color := 0; color < 256; color++ {
|
|
assert.True(t, key.HasColor(byte(color)), "should have color set %v", color)
|
|
}
|
|
}
|
|
|
|
func TestTilePaletteKeyContains(t *testing.T) {
|
|
baseKey := compression.TilePaletteKeyFrom([]byte{1, 2, 3, 4})
|
|
tt := []struct {
|
|
other []byte
|
|
expected bool
|
|
}{
|
|
{other: []byte{1, 2, 3, 4}, expected: true},
|
|
{other: []byte{2, 3, 4}, expected: true},
|
|
{other: []byte{1, 2, 4}, expected: true},
|
|
{other: []byte{4}, expected: true},
|
|
{other: []byte{}, expected: true},
|
|
{other: []byte{1, 2, 3, 4, 5}, expected: false},
|
|
{other: []byte{3, 4, 5}, expected: false},
|
|
{other: []byte{5}, expected: false},
|
|
}
|
|
|
|
for index, tc := range tt {
|
|
td := tc
|
|
t.Run(fmt.Sprintf("%v", index), func(t *testing.T) {
|
|
other := compression.TilePaletteKeyFrom(td.other)
|
|
result := baseKey.Contains(&other)
|
|
assert.Equal(t, result, td.expected)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestTilePaletteKeyWithout(t *testing.T) {
|
|
baseKey := compression.TilePaletteKeyFrom([]byte{1, 2, 3, 4})
|
|
tt := []struct {
|
|
other []byte
|
|
expected []byte
|
|
}{
|
|
{other: []byte{1, 2, 3, 4}, expected: []byte{}},
|
|
{other: []byte{2, 3, 4}, expected: []byte{1}},
|
|
{other: []byte{1, 2, 4}, expected: []byte{3}},
|
|
{other: []byte{4}, expected: []byte{1, 2, 3}},
|
|
{other: []byte{}, expected: []byte{1, 2, 3, 4}},
|
|
{other: []byte{1, 2, 3, 4, 5}, expected: []byte{}},
|
|
{other: []byte{3, 4, 5}, expected: []byte{1, 2}},
|
|
{other: []byte{5}, expected: []byte{1, 2, 3, 4}},
|
|
}
|
|
|
|
for index, tc := range tt {
|
|
td := tc
|
|
t.Run(fmt.Sprintf("%v", index), func(t *testing.T) {
|
|
other := compression.TilePaletteKeyFrom(td.other)
|
|
result := baseKey.Without(&other)
|
|
expected := compression.TilePaletteKeyFrom(td.expected)
|
|
assert.Equal(t, result, expected, "Mismatch for %v", td.other)
|
|
})
|
|
}
|
|
}
|