Commit 15a43e5c by kimvde Committed by Ian Baker

Improve tests of binary search utility methods

Improve unit tests of binary search methods by making them more
behavior-driven.

PiperOrigin-RevId: 291175304
parent 454d4add
...@@ -89,115 +89,223 @@ public class UtilTest { ...@@ -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);
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
.isEqualTo(-1);
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
.isEqualTo(0);
}
values = new long[] {1, 3, 5}; @Test
assertThat(binarySearchFloor(values, 0, false, false)).isEqualTo(-1); public void testArrayBinarySearchFloor_targetSmallerThanArrayValues() {
assertThat(binarySearchFloor(values, 0, true, false)).isEqualTo(-1); long[] array = new long[] {1, 3, 5};
assertThat(binarySearchFloor(values, 0, false, true)).isEqualTo(0); int target = 0;
assertThat(binarySearchFloor(values, 0, true, true)).isEqualTo(0);
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
.isEqualTo(-1);
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
.isEqualTo(0);
}
assertThat(binarySearchFloor(values, 1, false, false)).isEqualTo(-1); @Test
assertThat(binarySearchFloor(values, 1, true, false)).isEqualTo(0); public void testArrayBinarySearchFloor_targetBiggerThanArrayValues() {
assertThat(binarySearchFloor(values, 1, false, true)).isEqualTo(0); long[] array = new long[] {1, 3, 5};
assertThat(binarySearchFloor(values, 1, true, true)).isEqualTo(0); int target = 6;
assertThat(binarySearchFloor(values, 4, false, false)).isEqualTo(1); assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
assertThat(binarySearchFloor(values, 4, true, false)).isEqualTo(1); .isEqualTo(2);
}
assertThat(binarySearchFloor(values, 5, false, false)).isEqualTo(1); @Test
assertThat(binarySearchFloor(values, 5, true, false)).isEqualTo(2); public void testArrayBinarySearchFloor_targetInArray() {
long[] array = new long[] {1, 1, 1, 1, 1, 3, 5};
int target = 1;
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
.isEqualTo(-1);
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
.isEqualTo(0);
assertThat(binarySearchFloor(array, target, /* inclusive= */ true, /* stayInBounds= */ false))
.isEqualTo(0);
}
assertThat(binarySearchFloor(values, 6, false, false)).isEqualTo(2); @Test
assertThat(binarySearchFloor(values, 6, true, false)).isEqualTo(2); public void testArrayBinarySearchFloor_targetBetweenArrayValues() {
long[] array = new long[] {1, 1, 1, 1, 1, 3, 5};
int target = 2;
assertThat(binarySearchFloor(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
.isEqualTo(4);
assertThat(binarySearchFloor(array, target, /* inclusive= */ true, /* stayInBounds= */ false))
.isEqualTo(4);
} }
@Test @Test
public void testListBinarySearchFloor() { public void testListBinarySearchFloor_emptyList() {
List<Integer> values = new ArrayList<>(); List<Integer> list = Arrays.asList(1, 3, 5);
assertThat(binarySearchFloor(values, 0, false, false)).isEqualTo(-1); int target = 0;
assertThat(binarySearchFloor(values, 0, false, true)).isEqualTo(0);
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
.isEqualTo(-1);
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
.isEqualTo(0);
}
values.add(1); @Test
values.add(3); public void testListBinarySearchFloor_targetSmallerThanListValues() {
values.add(5); List<Integer> list = Arrays.asList(1, 3, 5);
assertThat(binarySearchFloor(values, 0, false, false)).isEqualTo(-1); int target = 0;
assertThat(binarySearchFloor(values, 0, true, false)).isEqualTo(-1);
assertThat(binarySearchFloor(values, 0, false, true)).isEqualTo(0); assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
assertThat(binarySearchFloor(values, 0, true, true)).isEqualTo(0); .isEqualTo(-1);
assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
.isEqualTo(0);
}
assertThat(binarySearchFloor(values, 1, false, false)).isEqualTo(-1); @Test
assertThat(binarySearchFloor(values, 1, true, false)).isEqualTo(0); public void testListBinarySearchFloor_targetBiggerThanListValues() {
assertThat(binarySearchFloor(values, 1, false, true)).isEqualTo(0); List<Integer> list = Arrays.asList(1, 3, 5);
assertThat(binarySearchFloor(values, 1, true, true)).isEqualTo(0); int target = 6;
assertThat(binarySearchFloor(values, 4, false, false)).isEqualTo(1); assertThat(binarySearchFloor(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
assertThat(binarySearchFloor(values, 4, true, false)).isEqualTo(1); .isEqualTo(2);
}
assertThat(binarySearchFloor(values, 5, false, false)).isEqualTo(1); @Test
assertThat(binarySearchFloor(values, 5, true, false)).isEqualTo(2); 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);
}
assertThat(binarySearchFloor(values, 6, false, false)).isEqualTo(2); @Test
assertThat(binarySearchFloor(values, 6, true, false)).isEqualTo(2); 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 @Test
public void testArrayBinarySearchCeil() { public void testArrayBinarySearchCeil_emptyArray() {
long[] values = new long[0]; long[] array = new long[0];
assertThat(binarySearchCeil(values, 0, false, false)).isEqualTo(0); int target = 0;
assertThat(binarySearchCeil(values, 0, false, true)).isEqualTo(-1);
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
.isEqualTo(0);
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ true))
.isEqualTo(-1);
}
values = new long[] {1, 3, 5}; @Test
assertThat(binarySearchCeil(values, 0, false, false)).isEqualTo(0); public void testArrayBinarySearchCeil_targetSmallerThanArrayValues() {
assertThat(binarySearchCeil(values, 0, true, false)).isEqualTo(0); long[] array = new long[] {1, 3, 5};
int target = 0;
assertThat(binarySearchCeil(values, 1, false, false)).isEqualTo(1); assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
assertThat(binarySearchCeil(values, 1, true, false)).isEqualTo(0); .isEqualTo(0);
}
assertThat(binarySearchCeil(values, 2, false, false)).isEqualTo(1); @Test
assertThat(binarySearchCeil(values, 2, true, false)).isEqualTo(1); 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);
}
assertThat(binarySearchCeil(values, 5, false, false)).isEqualTo(3); @Test
assertThat(binarySearchCeil(values, 5, true, false)).isEqualTo(2); public void testArrayBinarySearchCeil_targetInArray() {
assertThat(binarySearchCeil(values, 5, false, true)).isEqualTo(2); long[] array = new long[] {1, 3, 5, 5, 5, 5, 5};
assertThat(binarySearchCeil(values, 5, true, true)).isEqualTo(2); 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);
}
assertThat(binarySearchCeil(values, 6, false, false)).isEqualTo(3); @Test
assertThat(binarySearchCeil(values, 6, true, false)).isEqualTo(3); public void testArrayBinarySearchCeil_targetBetweenArrayValues() {
assertThat(binarySearchCeil(values, 6, false, true)).isEqualTo(2); long[] array = new long[] {1, 3, 5, 5, 5, 5, 5};
assertThat(binarySearchCeil(values, 6, true, true)).isEqualTo(2); int target = 4;
assertThat(binarySearchCeil(array, target, /* inclusive= */ false, /* stayInBounds= */ false))
.isEqualTo(2);
assertThat(binarySearchCeil(array, target, /* inclusive= */ true, /* stayInBounds= */ false))
.isEqualTo(2);
} }
@Test @Test
public void testListBinarySearchCeil() { public void testListBinarySearchCeil_emptyList() {
List<Integer> values = new ArrayList<>(); List<Integer> list = new ArrayList<>();
assertThat(binarySearchCeil(values, 0, false, false)).isEqualTo(0); int target = 0;
assertThat(binarySearchCeil(values, 0, false, true)).isEqualTo(-1);
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
.isEqualTo(0);
assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ true))
.isEqualTo(-1);
}
values.add(1); @Test
values.add(3); public void testListBinarySearchCeil_targetSmallerThanListValues() {
values.add(5); List<Integer> list = Arrays.asList(1, 3, 5);
assertThat(binarySearchCeil(values, 0, false, false)).isEqualTo(0); int target = 0;
assertThat(binarySearchCeil(values, 0, true, false)).isEqualTo(0);
assertThat(binarySearchCeil(values, 1, false, false)).isEqualTo(1); assertThat(binarySearchCeil(list, target, /* inclusive= */ false, /* stayInBounds= */ false))
assertThat(binarySearchCeil(values, 1, true, false)).isEqualTo(0); .isEqualTo(0);
}
assertThat(binarySearchCeil(values, 2, false, false)).isEqualTo(1); @Test
assertThat(binarySearchCeil(values, 2, true, false)).isEqualTo(1); 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);
}
assertThat(binarySearchCeil(values, 5, false, false)).isEqualTo(3); @Test
assertThat(binarySearchCeil(values, 5, true, false)).isEqualTo(2); public void testListBinarySearchCeil_targetInList() {
assertThat(binarySearchCeil(values, 5, false, true)).isEqualTo(2); List<Integer> list = Arrays.asList(1, 3, 5, 5, 5, 5, 5);
assertThat(binarySearchCeil(values, 5, true, true)).isEqualTo(2); 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);
}
assertThat(binarySearchCeil(values, 6, false, false)).isEqualTo(3); @Test
assertThat(binarySearchCeil(values, 6, true, false)).isEqualTo(3); public void testListBinarySearchCeil_targetBetweenListValues() {
assertThat(binarySearchCeil(values, 6, false, true)).isEqualTo(2); List<Integer> list = Arrays.asList(1, 3, 5, 5, 5, 5, 5);
assertThat(binarySearchCeil(values, 6, true, true)).isEqualTo(2); 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
......
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