github.com/bluenviron/mediacommon@v1.9.3/pkg/formats/mpegts/time_decoder_test.go (about)

     1  package mpegts
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  func TestTimeDecoderNegativeDiff(t *testing.T) {
    11  	d := NewTimeDecoder(64523434)
    12  
    13  	ts := d.Decode(64523434 - 90000)
    14  	require.Equal(t, -1*time.Second, ts)
    15  
    16  	ts = d.Decode(64523434)
    17  	require.Equal(t, time.Duration(0), ts)
    18  
    19  	ts = d.Decode(64523434 + 90000*2)
    20  	require.Equal(t, 2*time.Second, ts)
    21  
    22  	ts = d.Decode(64523434 + 90000)
    23  	require.Equal(t, 1*time.Second, ts)
    24  }
    25  
    26  func TestTimeDecoderOverflow(t *testing.T) {
    27  	d := NewTimeDecoder(0x1FFFFFFFF - 20)
    28  
    29  	i := int64(0x1FFFFFFFF - 20)
    30  	secs := time.Duration(0)
    31  	const stride = 150
    32  	lim := int64(uint64(0x1FFFFFFFF - (stride * 90000)))
    33  
    34  	for n := 0; n < 100; n++ {
    35  		// overflow
    36  		i += 90000 * stride
    37  		secs += stride
    38  		ts := d.Decode(i)
    39  		require.Equal(t, secs*time.Second, ts)
    40  
    41  		// reach 2^32 slowly
    42  		secs += stride
    43  		i += 90000 * stride
    44  		for ; i < lim; i += 90000 * stride {
    45  			ts = d.Decode(i)
    46  			require.Equal(t, secs*time.Second, ts)
    47  			secs += stride
    48  		}
    49  	}
    50  }
    51  
    52  func TestTimeDecoderOverflowAndBack(t *testing.T) {
    53  	d := NewTimeDecoder(0x1FFFFFFFF - 90000 + 1)
    54  
    55  	ts := d.Decode(0x1FFFFFFFF - 90000 + 1)
    56  	require.Equal(t, time.Duration(0), ts)
    57  
    58  	ts = d.Decode(90000)
    59  	require.Equal(t, 2*time.Second, ts)
    60  
    61  	ts = d.Decode(0x1FFFFFFFF - 90000 + 1)
    62  	require.Equal(t, time.Duration(0), ts)
    63  
    64  	ts = d.Decode(0x1FFFFFFFF - 90000*2 + 1)
    65  	require.Equal(t, -1*time.Second, ts)
    66  
    67  	ts = d.Decode(0x1FFFFFFFF - 90000 + 1)
    68  	require.Equal(t, time.Duration(0), ts)
    69  
    70  	ts = d.Decode(90000)
    71  	require.Equal(t, 2*time.Second, ts)
    72  }