From f8b23da7af9571647f6383b6deda515de7b71d63 Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 13 Sep 2023 08:35:46 -0700 Subject: [PATCH] Add overflow tests for sample count to duration conversion methods These methods were updated to use the new overflow-resistant `scaleLargeValue` method in https://github.com/androidx/media/commit/885ddb167e3ac164e2ee6dfcf3886c703a45bc38. PiperOrigin-RevId: 565059609 --- .../androidx/media3/common/util/UtilTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/libraries/common/src/test/java/androidx/media3/common/util/UtilTest.java b/libraries/common/src/test/java/androidx/media3/common/util/UtilTest.java index 353aeb24d7..01c9ca1fd0 100644 --- a/libraries/common/src/test/java/androidx/media3/common/util/UtilTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/util/UtilTest.java @@ -850,6 +850,26 @@ public class UtilTest { } } + @Test + public void durationToSampleCount_doesntOverflowWithLargeDuration() { + // Choose a durationUs & sampleRate that will overflow a signed 64-bit integer if they are + // multiplied together, but not if the durationUs is converted to seconds first. + long sampleCount = + Util.durationUsToSampleCount( + /* durationUs= */ Long.MAX_VALUE / 100_000, /* sampleRate= */ 192_000); + assertThat(sampleCount).isEqualTo(17708874310762L); + } + + @Test + public void sampleCountToDuration_doesntOverflowWithLargeDuration() { + // Choose a sampleCount that will overflow a signed 64-bit integer if it is multiplied directly + // by C.MICROS_PER_SECOND, but not if it is divided by sampleRate first. + long durationUs = + Util.sampleCountToDurationUs( + /* sampleCount= */ Long.MAX_VALUE / 100_000, /* sampleRate= */ 192_000); + assertThat(durationUs).isEqualTo(480383960252848L); + } + @Test public void parseXsDuration_returnsParsedDurationInMillis() { assertThat(parseXsDuration("PT150.279S")).isEqualTo(150279L);