Seems like the BinarySearch.cls does not support the edge case scenarios like the second element of a list of odd size, etc i.e. when left == right.
Ex: System.debug(BinarySearch.binarySearchIterative(new List{0,1,2,3,4,5,6,7,8,9,10},1)); fails and returns -1 even when 1 exists in the list.
Possible resolution: Handle the scenario by adding the following after while loop : if(left == right) return right;
#2