diff --git a/src/Searches/BinarySearch.sol b/src/Searches/BinarySearch.sol index b5cb184..96369d7 100644 --- a/src/Searches/BinarySearch.sol +++ b/src/Searches/BinarySearch.sol @@ -27,22 +27,17 @@ contract BinarySearch { } // returns the index position of the value in the array - function printResult() public view returns (uint256 result) { + function printResult() public view returns (int256 result) { uint256 minimum = 0; - uint256 maximum = _nums.length - 1; + uint256 maximum = _nums.length; - while (minimum <= maximum) { - uint256 middle = (minimum + maximum) / 2; + while (minimum < maximum) { + uint256 middle = minimum + (maximum - minimum) / 2; uint256 currentElement = _nums[middle]; if (currentElement < value) { minimum = middle + 1; - } - else if (currentElement > value) { - if (middle == 0) { - maximum = 0; - } else { - maximum = middle - 1; - } + } else if (currentElement > value) { + maximum = middle; } else { result = int256(middle); // return the index position of the value in the array diff --git a/src/Searches/test/BinarySearch.t.sol b/src/Searches/test/BinarySearch.t.sol index 8acca18..08854ff 100644 --- a/src/Searches/test/BinarySearch.t.sol +++ b/src/Searches/test/BinarySearch.t.sol @@ -22,8 +22,15 @@ contract BinarySearchTest is Test { /// @dev Test `BinarySearch` function test_BinarySearch() external { - uint searchedIndex = bs.printResult(); - uint expectedIndex = 9; + int searchedIndex = bs.printResult(); + int expectedIndex = 9; + assertEq(expectedIndex, searchedIndex); + } + + function test_BinarySearchNotFound() external { + bs.setValue(21); + int searchedIndex = bs.printResult(); + int expectedIndex = -1; assertEq(expectedIndex, searchedIndex); } }