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 }