mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Improve tests of binary search utility methods
Improve unit tests of binary search methods by making them more behavior-driven. PiperOrigin-RevId: 291175304
This commit is contained in:
parent
454d4add4a
commit
15a43e5c78
@ -89,115 +89,223 @@ public class UtilTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testArrayBinarySearchFloor() {
|
public void testArrayBinarySearchFloor_emptyArray() {
|
||||||
long[] values = new long[0];
|
long[] array = new long[0];
|
||||||
assertThat(binarySearchFloor(values, 0, false, false)).isEqualTo(-1);
|
int target = 0;
|
||||||
assertThat(binarySearchFloor(values, 0, false, true)).isEqualTo(0);
|
|
||||||
|
|
||||||
values = new long[] {1, 3, 5};
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
assertThat(binarySearchFloor(values, 0, false, false)).isEqualTo(-1);
|
.isEqualTo(-1);
|
||||||
assertThat(binarySearchFloor(values, 0, true, false)).isEqualTo(-1);
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
assertThat(binarySearchFloor(values, 0, false, true)).isEqualTo(0);
|
.isEqualTo(0);
|
||||||
assertThat(binarySearchFloor(values, 0, true, true)).isEqualTo(0);
|
|
||||||
|
|
||||||
assertThat(binarySearchFloor(values, 1, false, false)).isEqualTo(-1);
|
|
||||||
assertThat(binarySearchFloor(values, 1, true, false)).isEqualTo(0);
|
|
||||||
assertThat(binarySearchFloor(values, 1, false, true)).isEqualTo(0);
|
|
||||||
assertThat(binarySearchFloor(values, 1, true, true)).isEqualTo(0);
|
|
||||||
|
|
||||||
assertThat(binarySearchFloor(values, 4, false, false)).isEqualTo(1);
|
|
||||||
assertThat(binarySearchFloor(values, 4, true, false)).isEqualTo(1);
|
|
||||||
|
|
||||||
assertThat(binarySearchFloor(values, 5, false, false)).isEqualTo(1);
|
|
||||||
assertThat(binarySearchFloor(values, 5, true, false)).isEqualTo(2);
|
|
||||||
|
|
||||||
assertThat(binarySearchFloor(values, 6, false, false)).isEqualTo(2);
|
|
||||||
assertThat(binarySearchFloor(values, 6, true, false)).isEqualTo(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testListBinarySearchFloor() {
|
public void testArrayBinarySearchFloor_targetSmallerThanArrayValues() {
|
||||||
List<Integer> values = new ArrayList<>();
|
long[] array = new long[] {1, 3, 5};
|
||||||
assertThat(binarySearchFloor(values, 0, false, false)).isEqualTo(-1);
|
int target = 0;
|
||||||
assertThat(binarySearchFloor(values, 0, false, true)).isEqualTo(0);
|
|
||||||
|
|
||||||
values.add(1);
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
values.add(3);
|
.isEqualTo(-1);
|
||||||
values.add(5);
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
assertThat(binarySearchFloor(values, 0, false, false)).isEqualTo(-1);
|
.isEqualTo(0);
|
||||||
assertThat(binarySearchFloor(values, 0, true, false)).isEqualTo(-1);
|
|
||||||
assertThat(binarySearchFloor(values, 0, false, true)).isEqualTo(0);
|
|
||||||
assertThat(binarySearchFloor(values, 0, true, true)).isEqualTo(0);
|
|
||||||
|
|
||||||
assertThat(binarySearchFloor(values, 1, false, false)).isEqualTo(-1);
|
|
||||||
assertThat(binarySearchFloor(values, 1, true, false)).isEqualTo(0);
|
|
||||||
assertThat(binarySearchFloor(values, 1, false, true)).isEqualTo(0);
|
|
||||||
assertThat(binarySearchFloor(values, 1, true, true)).isEqualTo(0);
|
|
||||||
|
|
||||||
assertThat(binarySearchFloor(values, 4, false, false)).isEqualTo(1);
|
|
||||||
assertThat(binarySearchFloor(values, 4, true, false)).isEqualTo(1);
|
|
||||||
|
|
||||||
assertThat(binarySearchFloor(values, 5, false, false)).isEqualTo(1);
|
|
||||||
assertThat(binarySearchFloor(values, 5, true, false)).isEqualTo(2);
|
|
||||||
|
|
||||||
assertThat(binarySearchFloor(values, 6, false, false)).isEqualTo(2);
|
|
||||||
assertThat(binarySearchFloor(values, 6, true, false)).isEqualTo(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testArrayBinarySearchCeil() {
|
public void testArrayBinarySearchFloor_targetBiggerThanArrayValues() {
|
||||||
long[] values = new long[0];
|
long[] array = new long[] {1, 3, 5};
|
||||||
assertThat(binarySearchCeil(values, 0, false, false)).isEqualTo(0);
|
int target = 6;
|
||||||
assertThat(binarySearchCeil(values, 0, false, true)).isEqualTo(-1);
|
|
||||||
|
|
||||||
values = new long[] {1, 3, 5};
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
assertThat(binarySearchCeil(values, 0, false, false)).isEqualTo(0);
|
.isEqualTo(2);
|
||||||
assertThat(binarySearchCeil(values, 0, true, false)).isEqualTo(0);
|
|
||||||
|
|
||||||
assertThat(binarySearchCeil(values, 1, false, false)).isEqualTo(1);
|
|
||||||
assertThat(binarySearchCeil(values, 1, true, false)).isEqualTo(0);
|
|
||||||
|
|
||||||
assertThat(binarySearchCeil(values, 2, false, false)).isEqualTo(1);
|
|
||||||
assertThat(binarySearchCeil(values, 2, true, false)).isEqualTo(1);
|
|
||||||
|
|
||||||
assertThat(binarySearchCeil(values, 5, false, false)).isEqualTo(3);
|
|
||||||
assertThat(binarySearchCeil(values, 5, true, false)).isEqualTo(2);
|
|
||||||
assertThat(binarySearchCeil(values, 5, false, true)).isEqualTo(2);
|
|
||||||
assertThat(binarySearchCeil(values, 5, true, true)).isEqualTo(2);
|
|
||||||
|
|
||||||
assertThat(binarySearchCeil(values, 6, false, false)).isEqualTo(3);
|
|
||||||
assertThat(binarySearchCeil(values, 6, true, false)).isEqualTo(3);
|
|
||||||
assertThat(binarySearchCeil(values, 6, false, true)).isEqualTo(2);
|
|
||||||
assertThat(binarySearchCeil(values, 6, true, true)).isEqualTo(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testListBinarySearchCeil() {
|
public void testArrayBinarySearchFloor_targetInArray() {
|
||||||
List<Integer> values = new ArrayList<>();
|
long[] array = new long[] {1, 1, 1, 1, 1, 3, 5};
|
||||||
assertThat(binarySearchCeil(values, 0, false, false)).isEqualTo(0);
|
int target = 1;
|
||||||
assertThat(binarySearchCeil(values, 0, false, true)).isEqualTo(-1);
|
|
||||||
|
|
||||||
values.add(1);
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
values.add(3);
|
.isEqualTo(-1);
|
||||||
values.add(5);
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
assertThat(binarySearchCeil(values, 0, false, false)).isEqualTo(0);
|
.isEqualTo(0);
|
||||||
assertThat(binarySearchCeil(values, 0, true, false)).isEqualTo(0);
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ true, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
assertThat(binarySearchCeil(values, 1, false, false)).isEqualTo(1);
|
@Test
|
||||||
assertThat(binarySearchCeil(values, 1, true, false)).isEqualTo(0);
|
public void testArrayBinarySearchFloor_targetBetweenArrayValues() {
|
||||||
|
long[] array = new long[] {1, 1, 1, 1, 1, 3, 5};
|
||||||
|
int target = 2;
|
||||||
|
|
||||||
assertThat(binarySearchCeil(values, 2, false, false)).isEqualTo(1);
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
assertThat(binarySearchCeil(values, 2, true, false)).isEqualTo(1);
|
.isEqualTo(4);
|
||||||
|
assertThat(binarySearchFloor(array, target, /* inclusive= */ true, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(4);
|
||||||
|
}
|
||||||
|
|
||||||
assertThat(binarySearchCeil(values, 5, false, false)).isEqualTo(3);
|
@Test
|
||||||
assertThat(binarySearchCeil(values, 5, true, false)).isEqualTo(2);
|
public void testListBinarySearchFloor_emptyList() {
|
||||||
assertThat(binarySearchCeil(values, 5, false, true)).isEqualTo(2);
|
List<Integer> list = Arrays.asList(1, 3, 5);
|
||||||
assertThat(binarySearchCeil(values, 5, true, true)).isEqualTo(2);
|
int target = 0;
|
||||||
|
|
||||||
assertThat(binarySearchCeil(values, 6, false, false)).isEqualTo(3);
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
assertThat(binarySearchCeil(values, 6, true, false)).isEqualTo(3);
|
.isEqualTo(-1);
|
||||||
assertThat(binarySearchCeil(values, 6, false, true)).isEqualTo(2);
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
assertThat(binarySearchCeil(values, 6, true, true)).isEqualTo(2);
|
.isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchFloor_targetSmallerThanListValues() {
|
||||||
|
List<Integer> list = Arrays.asList(1, 3, 5);
|
||||||
|
int target = 0;
|
||||||
|
|
||||||
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(-1);
|
||||||
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
|
.isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchFloor_targetBiggerThanListValues() {
|
||||||
|
List<Integer> list = Arrays.asList(1, 3, 5);
|
||||||
|
int target = 6;
|
||||||
|
|
||||||
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchFloor_targetInList() {
|
||||||
|
List<Integer> list = Arrays.asList(1, 1, 1, 1, 1, 3, 5);
|
||||||
|
int target = 1;
|
||||||
|
|
||||||
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(-1);
|
||||||
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
|
.isEqualTo(0);
|
||||||
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ true, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchFloor_targetBetweenListValues() {
|
||||||
|
List<Integer> list = Arrays.asList(1, 1, 1, 1, 1, 3, 5);
|
||||||
|
int target = 2;
|
||||||
|
|
||||||
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(4);
|
||||||
|
assertThat(binarySearchFloor(list, target, /* inclusive= */ true, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testArrayBinarySearchCeil_emptyArray() {
|
||||||
|
long[] array = new long[0];
|
||||||
|
int target = 0;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(0);
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
|
.isEqualTo(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testArrayBinarySearchCeil_targetSmallerThanArrayValues() {
|
||||||
|
long[] array = new long[] {1, 3, 5};
|
||||||
|
int target = 0;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testArrayBinarySearchCeil_targetBiggerThanArrayValues() {
|
||||||
|
long[] array = new long[] {1, 3, 5};
|
||||||
|
int target = 6;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(3);
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
|
.isEqualTo(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testArrayBinarySearchCeil_targetInArray() {
|
||||||
|
long[] array = new long[] {1, 3, 5, 5, 5, 5, 5};
|
||||||
|
int target = 5;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(7);
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
|
.isEqualTo(6);
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ true, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testArrayBinarySearchCeil_targetBetweenArrayValues() {
|
||||||
|
long[] array = new long[] {1, 3, 5, 5, 5, 5, 5};
|
||||||
|
int target = 4;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(2);
|
||||||
|
assertThat(binarySearchCeil(array, target, /* inclusive= */ true, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchCeil_emptyList() {
|
||||||
|
List<Integer> list = new ArrayList<>();
|
||||||
|
int target = 0;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(0);
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
|
.isEqualTo(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchCeil_targetSmallerThanListValues() {
|
||||||
|
List<Integer> list = Arrays.asList(1, 3, 5);
|
||||||
|
int target = 0;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchCeil_targetBiggerThanListValues() {
|
||||||
|
List<Integer> list = Arrays.asList(1, 3, 5);
|
||||||
|
int target = 6;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(3);
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
|
.isEqualTo(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchCeil_targetInList() {
|
||||||
|
List<Integer> list = Arrays.asList(1, 3, 5, 5, 5, 5, 5);
|
||||||
|
int target = 5;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(7);
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
|
||||||
|
.isEqualTo(6);
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ true, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListBinarySearchCeil_targetBetweenListValues() {
|
||||||
|
List<Integer> list = Arrays.asList(1, 3, 5, 5, 5, 5, 5);
|
||||||
|
int target = 4;
|
||||||
|
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(2);
|
||||||
|
assertThat(binarySearchCeil(list, target, /* inclusive= */ true, /* stayInBounds= */ false))
|
||||||
|
.isEqualTo(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Loading…
x
Reference in New Issue
Block a user