mirror of
https://github.com/bluenviron/mediacommon.git
synced 2025-10-18 06:31:04 +08:00
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package mpegts
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTimeDecoderNegativeDiff(t *testing.T) {
|
|
d := NewTimeDecoder()
|
|
|
|
ts := d.Decode(64523434)
|
|
require.Equal(t, int64(0), ts)
|
|
|
|
ts = d.Decode(64523434 - 90000)
|
|
require.Equal(t, int64(-90000), ts)
|
|
|
|
ts = d.Decode(64523434)
|
|
require.Equal(t, int64(0), ts)
|
|
|
|
ts = d.Decode(64523434 + 90000*2)
|
|
require.Equal(t, int64(2*90000), ts)
|
|
|
|
ts = d.Decode(64523434 + 90000)
|
|
require.Equal(t, int64(1*90000), ts)
|
|
}
|
|
|
|
func TestTimeDecoderOverflow(t *testing.T) {
|
|
d := NewTimeDecoder()
|
|
|
|
ts := d.Decode(0x1FFFFFFFF - 20)
|
|
require.Equal(t, int64(0), ts)
|
|
|
|
i := int64(0x1FFFFFFFF - 20)
|
|
secs := int64(0)
|
|
const stride = 150
|
|
lim := int64(uint64(0x1FFFFFFFF - (stride * 90000)))
|
|
|
|
for n := 0; n < 100; n++ {
|
|
// overflow
|
|
i += 90000 * stride
|
|
secs += stride
|
|
ts = d.Decode(i)
|
|
require.Equal(t, secs*90000, ts)
|
|
|
|
// reach 2^32 slowly
|
|
secs += stride
|
|
i += 90000 * stride
|
|
for ; i < lim; i += 90000 * stride {
|
|
ts = d.Decode(i)
|
|
require.Equal(t, secs*90000, ts)
|
|
secs += stride
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTimeDecoderOverflowAndBack(t *testing.T) {
|
|
d := NewTimeDecoder()
|
|
|
|
ts := d.Decode(0x1FFFFFFFF - 90000 + 1)
|
|
require.Equal(t, int64(0), ts)
|
|
|
|
ts = d.Decode(0x1FFFFFFFF - 90000 + 1)
|
|
require.Equal(t, int64(0), ts)
|
|
|
|
ts = d.Decode(90000)
|
|
require.Equal(t, int64(2*90000), ts)
|
|
|
|
ts = d.Decode(0x1FFFFFFFF - 90000 + 1)
|
|
require.Equal(t, int64(0), ts)
|
|
|
|
ts = d.Decode(0x1FFFFFFFF - 90000*2 + 1)
|
|
require.Equal(t, int64(-1*90000), ts)
|
|
|
|
ts = d.Decode(0x1FFFFFFFF - 90000 + 1)
|
|
require.Equal(t, int64(0), ts)
|
|
|
|
ts = d.Decode(90000)
|
|
require.Equal(t, int64(2*90000), ts)
|
|
}
|