Бинарный поиск. Найти индекс, которого может и не быть

Дан отсортированный массив, нужно найти индекс элемента, если он не найден, то вернуть -1

К обычному бинарному поиску здесь добавляется еще одно ключевое условие, когда в выбранном подмассиве искомый элемент не найден.

@Test  
fun makeSearchTest() {  
    Assert.assertEquals(2, findIndex(intArrayOf(0, 1, 2), 2))  
    Assert.assertEquals(0, findIndex(intArrayOf(0, 1, 2), 0))  
    Assert.assertEquals(0, findIndex(intArrayOf(2, 5, 8, 19, 24), 2))  
    Assert.assertEquals(-1, findIndex(intArrayOf(), 2))  
    Assert.assertEquals(-1, findIndex(intArrayOf(1, 3, 5), 2))  
}

private fun findIndex(array: IntArray, value: Int): Int {  
    var start = 0  
    var end = array.size - 1  
  
    while (start <= end) {  
        val midIndex = start + (end - start) / 2  
        val midValue = array[midIndex]  
        val number1 = array[start]  
        val number2 = array[end]  
  
        when {  
            midValue == value -> return midIndex  
            number1 >= value && value < midValue -> end = midIndex - 1  
            value in (midValue + 1)..number2 -> start = midIndex + 1  
            else -> return -1  
        }  
    }  
  
    return -1  
}

Для последнего примера findIndex(intArrayOf(1, 3, 5), 2) как раз эта ситуация, когда без добавления условия else -> return -1 на каждой итерации цикл не будет попадать ни в одно из условий when.