github.com/bluenviron/mediacommon@v1.9.3/pkg/codecs/jpeg/define_quantization_table_test.go (about)

     1  package jpeg
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  var casesDefineQuantizationTable = []struct {
    11  	name string
    12  	enc  []byte
    13  	dec  DefineQuantizationTable
    14  }{
    15  	{
    16  		"base",
    17  		[]byte{
    18  			0xff, 0xdb, 0x0, 0x84, 0x4, 0x1, 0x2, 0x3,
    19  			0x4, 0x1, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3,
    20  			0x4, 0x1, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3,
    21  			0x4, 0x1, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3,
    22  			0x4, 0x1, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3,
    23  			0x4, 0x1, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3,
    24  			0x4, 0x1, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3,
    25  			0x4, 0x1, 0x2, 0x3, 0x4, 0x1, 0x2, 0x3,
    26  			0x4, 0x1, 0x2, 0x3, 0x4, 0x5, 0x5, 0x6,
    27  			0x7, 0x8, 0x5, 0x6, 0x7, 0x8, 0x5, 0x6,
    28  			0x7, 0x8, 0x5, 0x6, 0x7, 0x8, 0x5, 0x6,
    29  			0x7, 0x8, 0x5, 0x6, 0x7, 0x8, 0x5, 0x6,
    30  			0x7, 0x8, 0x5, 0x6, 0x7, 0x8, 0x5, 0x6,
    31  			0x7, 0x8, 0x5, 0x6, 0x7, 0x8, 0x5, 0x6,
    32  			0x7, 0x8, 0x5, 0x6, 0x7, 0x8, 0x5, 0x6,
    33  			0x7, 0x8, 0x5, 0x6, 0x7, 0x8, 0x5, 0x6,
    34  			0x7, 0x8, 0x5, 0x6, 0x7, 0x8,
    35  		},
    36  		DefineQuantizationTable{
    37  			Tables: []QuantizationTable{
    38  				{
    39  					ID:   4,
    40  					Data: bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 64/4),
    41  				},
    42  				{
    43  					ID:   5,
    44  					Data: bytes.Repeat([]byte{0x05, 0x06, 0x07, 0x08}, 64/4),
    45  				},
    46  			},
    47  		},
    48  	},
    49  }
    50  
    51  func TestDefineQuantizationTableUnmarshal(t *testing.T) {
    52  	for _, ca := range casesDefineQuantizationTable {
    53  		t.Run(ca.name, func(t *testing.T) {
    54  			var h DefineQuantizationTable
    55  			err := h.Unmarshal(ca.enc[4:])
    56  			require.NoError(t, err)
    57  			require.Equal(t, ca.dec, h)
    58  		})
    59  	}
    60  }
    61  
    62  func TestDefineQuantizationTableMarshal(t *testing.T) {
    63  	for _, ca := range casesDefineQuantizationTable {
    64  		t.Run(ca.name, func(t *testing.T) {
    65  			byts := ca.dec.Marshal(nil)
    66  			require.Equal(t, ca.enc, byts)
    67  		})
    68  	}
    69  }
    70  
    71  func FuzzDefineQuantizationTableUnmarshal(f *testing.F) {
    72  	f.Fuzz(func(_ *testing.T, b []byte) {
    73  		var h DefineQuantizationTable
    74  		h.Unmarshal(b) //nolint:errcheck
    75  	})
    76  }