182 lines
4.3 KiB
Go
182 lines
4.3 KiB
Go
package compression_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/inkyblackness/hacked/ss1/content/movie/internal/compression"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestBitstreamReadPanicsForMoreThan32Bits(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0x11, 0x22, 0x33, 0x44})
|
|
|
|
assert.Panicsf(t, func() { reader.Read(33) }, "Limit of bit count: 32")
|
|
}
|
|
|
|
func TestBitstreamReadReturnsValueOfRequestedBitSize(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xAF})
|
|
|
|
result := reader.Read(3)
|
|
|
|
assert.Equal(t, uint32(5), result)
|
|
}
|
|
|
|
func TestBitstreamRepeatedReadReturnsSameValue(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xAF})
|
|
|
|
result1 := reader.Read(3)
|
|
result2 := reader.Read(3)
|
|
|
|
assert.Equal(t, uint32(5), result1)
|
|
assert.Equal(t, result1, result2)
|
|
}
|
|
|
|
func TestBitstreamReadReturnsZeroesForBitsBeyondEndA(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xAF})
|
|
|
|
result := reader.Read(9)
|
|
|
|
assert.Equal(t, uint32(0x15E), result)
|
|
}
|
|
|
|
func TestBitstreamReadReturnsZeroesForBitsBeyondEndB(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xBF})
|
|
|
|
result := reader.Read(32)
|
|
|
|
assert.Equal(t, uint32(0xBF000000), result)
|
|
}
|
|
|
|
func TestBitstreamAdvancePanicsForNegativeValues(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0x11, 0x22, 0x33, 0x44})
|
|
|
|
assert.Panicsf(t, func() { reader.Advance(-10) }, "Can only advance forward")
|
|
}
|
|
|
|
func TestBitstreamAdvanceLetsReadFurtherBits(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xAF})
|
|
|
|
reader.Advance(2)
|
|
result := reader.Read(4)
|
|
|
|
assert.Equal(t, uint32(0x0B), result)
|
|
}
|
|
|
|
func TestBitstreamAdvanceToEndIsPossible(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xAF})
|
|
|
|
reader.Advance(8)
|
|
result := reader.Read(8)
|
|
|
|
assert.Equal(t, uint32(0), result)
|
|
}
|
|
|
|
func TestBitstreamInternalBufferDoesNotLoseData(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0x7F, 0xFF, 0xFF, 0xFF, 0x80})
|
|
|
|
reader.Advance(1)
|
|
result := reader.Read(32)
|
|
|
|
assert.Equal(t, uint32(0xFFFFFFFF), result)
|
|
}
|
|
|
|
func TestBitstreamAdvanceCanJumpToLastBit(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0x00, 0x00, 0x01})
|
|
|
|
reader.Advance(23)
|
|
result := reader.Read(1)
|
|
|
|
assert.Equal(t, uint32(1), result)
|
|
}
|
|
|
|
func TestBitstreamReadAdvanceBeyondFirstRead(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF, 0x00, 0xFA})
|
|
|
|
reader.Read(10)
|
|
reader.Advance(20)
|
|
result := reader.Read(4)
|
|
|
|
assert.Equal(t, uint32(0x0A), result)
|
|
}
|
|
|
|
func TestBitstreamReadAdvanceWithinFirstRead(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF, 0x00, 0xFA})
|
|
|
|
reader.Read(10)
|
|
reader.Advance(4)
|
|
result := reader.Read(20)
|
|
|
|
assert.Equal(t, uint32(0xF00FA), result)
|
|
}
|
|
|
|
func TestBitstreamReadOfZeroBitsIsPossibleMidStream(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF})
|
|
|
|
reader.Read(4)
|
|
result := reader.Read(0)
|
|
|
|
assert.Equal(t, uint32(0), result)
|
|
}
|
|
|
|
func TestBitstreamReadOfZeroBitsIsPossibleAtEnd(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF})
|
|
|
|
reader.Advance(8)
|
|
result := reader.Read(0)
|
|
|
|
assert.Equal(t, uint32(0), result)
|
|
}
|
|
|
|
func TestBitstreamReadOfZeroBitsIsPossibleWithEmptySource(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{})
|
|
|
|
result := reader.Read(0)
|
|
|
|
assert.Equal(t, uint32(0), result)
|
|
}
|
|
|
|
func TestBitstreamAdvanceBeyondEndIsPossible(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF})
|
|
|
|
reader.Advance(9)
|
|
result := reader.Read(32)
|
|
|
|
assert.Equal(t, uint32(0), result)
|
|
}
|
|
|
|
func TestBitstreamExhaustedReturnsFalseForAvailableBits(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF})
|
|
|
|
result := reader.Exhausted()
|
|
|
|
assert.False(t, result)
|
|
}
|
|
|
|
func TestBitstreamExhaustedReturnsFalseForStillOneAvailableBit(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF})
|
|
|
|
reader.Advance(7)
|
|
result := reader.Exhausted()
|
|
|
|
assert.False(t, result)
|
|
}
|
|
|
|
func TestBitstreamExhaustedReturnsTrueAfterAdvancingToEnd(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF, 0xFF})
|
|
|
|
reader.Advance(16)
|
|
result := reader.Exhausted()
|
|
|
|
assert.True(t, result)
|
|
}
|
|
|
|
func TestBitstreamExhaustedReturnsTrueAfterAdvancingBeyondEnd(t *testing.T) {
|
|
reader := compression.NewBitstreamReader([]byte{0xFF, 0xFF})
|
|
|
|
reader.Advance(30)
|
|
result := reader.Exhausted()
|
|
|
|
assert.True(t, result)
|
|
}
|