github.com/bluenviron/mediacommon@v1.9.3/pkg/bits/read_test.go (about)

     1  package bits
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestReadBits(t *testing.T) {
    10  	buf := []byte{0xA8, 0xC7, 0xD6, 0xAA, 0xBB, 0x10}
    11  	pos := 0
    12  	v, _ := ReadBits(buf, &pos, 6)
    13  	require.Equal(t, uint64(0x2a), v)
    14  	v, _ = ReadBits(buf, &pos, 6)
    15  	require.Equal(t, uint64(0x0c), v)
    16  	v, _ = ReadBits(buf, &pos, 6)
    17  	require.Equal(t, uint64(0x1f), v)
    18  	v, _ = ReadBits(buf, &pos, 8)
    19  	require.Equal(t, uint64(0x5a), v)
    20  	v, _ = ReadBits(buf, &pos, 20)
    21  	require.Equal(t, uint64(0xaaec4), v)
    22  }
    23  
    24  func TestReadBitsError(t *testing.T) {
    25  	buf := []byte{0xA8}
    26  	pos := 0
    27  	_, err := ReadBits(buf, &pos, 6)
    28  	require.NoError(t, err)
    29  	_, err = ReadBits(buf, &pos, 6)
    30  	require.EqualError(t, err, "not enough bits")
    31  }
    32  
    33  func TestReadGolombUnsigned(t *testing.T) {
    34  	buf := []byte{0x38}
    35  	pos := 0
    36  	v, _ := ReadGolombUnsigned(buf, &pos)
    37  	require.Equal(t, uint32(6), v)
    38  }
    39  
    40  func TestReadGolombUnsignedErrors(t *testing.T) {
    41  	buf := []byte{0x00}
    42  	pos := 0
    43  	_, err := ReadGolombUnsigned(buf, &pos)
    44  	require.EqualError(t, err, "not enough bits")
    45  
    46  	buf = []byte{0x00, 0x01}
    47  	pos = 0
    48  	_, err = ReadGolombUnsigned(buf, &pos)
    49  	require.EqualError(t, err, "not enough bits")
    50  
    51  	buf = []byte{0x00, 0x00, 0x00, 0x00, 0x01}
    52  	pos = 0
    53  	_, err = ReadGolombUnsigned(buf, &pos)
    54  	require.EqualError(t, err, "invalid value")
    55  }
    56  
    57  func TestReadGolombSigned(t *testing.T) {
    58  	buf := []byte{0x38}
    59  	pos := 0
    60  	v, _ := ReadGolombSigned(buf, &pos)
    61  	require.Equal(t, int32(-3), v)
    62  
    63  	buf = []byte{0b00100100}
    64  	pos = 0
    65  	v, _ = ReadGolombSigned(buf, &pos)
    66  	require.Equal(t, int32(2), v)
    67  }
    68  
    69  func TestReadGolombSignedErrors(t *testing.T) {
    70  	buf := []byte{0x00}
    71  	pos := 0
    72  	_, err := ReadGolombSigned(buf, &pos)
    73  	require.EqualError(t, err, "not enough bits")
    74  }
    75  
    76  func TestReadFlag(t *testing.T) {
    77  	buf := []byte{0xFF}
    78  	pos := 0
    79  	v, _ := ReadFlag(buf, &pos)
    80  	require.Equal(t, true, v)
    81  }
    82  
    83  func TestReadFlagError(t *testing.T) {
    84  	buf := []byte{}
    85  	pos := 0
    86  	_, err := ReadFlag(buf, &pos)
    87  	require.EqualError(t, err, "not enough bits")
    88  }