Commit e6d87414 by kimvde Committed by Oliver Woodman

Add method to compute a SparseLongArray min value.

PiperOrigin-RevId: 348008973
parent 490519a4
......@@ -49,6 +49,7 @@ import android.security.NetworkSecurityPolicy;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Base64;
import android.util.SparseLongArray;
import android.view.Display;
import android.view.SurfaceView;
import android.view.WindowManager;
......@@ -82,6 +83,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.NoSuchElementException;
import java.util.TimeZone;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
......@@ -1174,6 +1176,25 @@ public final class Util {
}
/**
* Returns the minimum value in the given {@link SparseLongArray}.
*
* @param sparseLongArray The {@link SparseLongArray}.
* @return The minimum value.
* @throws NoSuchElementException If the array is empty.
*/
@RequiresApi(18)
public static long minValue(SparseLongArray sparseLongArray) {
if (sparseLongArray.size() == 0) {
throw new NoSuchElementException();
}
long min = Long.MAX_VALUE;
for (int i = 0; i < sparseLongArray.size(); i++) {
min = min(min, sparseLongArray.valueAt(i));
}
return min;
}
/**
* Parses an xs:duration attribute value, returning the parsed duration in milliseconds.
*
* @param value The attribute value to decode.
......
......@@ -20,10 +20,12 @@ import static com.google.android.exoplayer2.util.Util.binarySearchFloor;
import static com.google.android.exoplayer2.util.Util.escapeFileName;
import static com.google.android.exoplayer2.util.Util.getCodecsOfType;
import static com.google.android.exoplayer2.util.Util.getStringForTime;
import static com.google.android.exoplayer2.util.Util.minValue;
import static com.google.android.exoplayer2.util.Util.parseXsDateTime;
import static com.google.android.exoplayer2.util.Util.parseXsDuration;
import static com.google.android.exoplayer2.util.Util.unescapeFileName;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
......@@ -32,6 +34,7 @@ import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.StrikethroughSpan;
import android.text.style.UnderlineSpan;
import android.util.SparseLongArray;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import java.nio.ByteBuffer;
......@@ -39,6 +42,7 @@ import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Formatter;
import java.util.NoSuchElementException;
import java.util.Random;
import java.util.zip.Deflater;
import org.junit.Test;
......@@ -724,6 +728,21 @@ public class UtilTest {
}
@Test
public void sparseLongArrayMinValue_returnsMinValue() {
SparseLongArray sparseLongArray = new SparseLongArray();
sparseLongArray.put(0, 12);
sparseLongArray.put(25, 10);
sparseLongArray.put(42, 11);
assertThat(minValue(sparseLongArray)).isEqualTo(10);
}
@Test
public void sparseLongArrayMinValue_emptyArray_throws() {
assertThrows(NoSuchElementException.class, () -> minValue(new SparseLongArray()));
}
@Test
public void parseXsDuration_returnsParsedDurationInMillis() {
assertThat(parseXsDuration("PT150.279S")).isEqualTo(150279L);
assertThat(parseXsDuration("PT1.500S")).isEqualTo(1500L);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment