# Binary Search and Max Finder Crate
This crate provides two utility functions:
1. **`binary_search`**: A function that performs a binary search to find the index of an item in a sorted vector.
2. **`find_max_recursive`**: A recursive function to find the maximum value in a vector of integers.
## Features
- Implements a **binary search** algorithm for sorted collections.
- Implements a **recursive** algorithm to find the maximum value in a collection of integers.
- Provides tests to ensure correctness and handle edge cases.
## Usage
### Binary Search
To use the `binary_search` function, you can call it with a sorted vector and the item to search for. It returns the index of the item if found, or `None` if not.
```rust
use your_crate_name::binary_search;
let items = vec![16, 32, 64, 128, 256, 512, 1024];
let result = binary_search(items, 256);
match result {
Some(index) => println!("Item found at index: {}", index),
None => println!("Item not found"),
}
```
### Find Maximum Value Recursively
To use the `find_max_recursive` function, call it with a vector of integers. It returns the maximum value in the vector or `0` if the vector is empty.
```rust
use your_crate_name::find_max_recursive;
let items = vec![8, 12, 128, 1, 90, -1, 32];
let max_value = find_max_recursive(&items);
println!("The maximum value is: {}", max_value);
```
## Function Details
### `binary_search`
```rust
pub fn binary_search<T>(list: Vec<T>, item: T) -> Option<usize>
where
T: std::cmp::Ord,
```
#### Parameters:
- `list`: A vector of elements that must be sorted in ascending order.
- `item`: The element to search for in the vector.
#### Returns:
- `Some(usize)`: The index of the item in the list if found.
- `None`: If the item is not found in the list.
### `find_max_recursive`
```rust
pub fn find_max_recursive(coll: &Vec<i32>) -> i32
```
#### Parameters:
- `coll`: A reference to a vector of integers (`Vec<i32>`) to find the maximum value in.
#### Returns:
- `i32`: The maximum value in the vector. Returns `0` if the vector is empty.
## Testing
This crate includes the following tests:
### For `binary_search`:
- **returns_none_if_items_is_empty**: Ensures that an empty list returns `None`.
- **doesnt_finds_if_collection_is_not_sorted**: Tests that unsorted lists do not return a valid result.
- **finds_index_of_element**: Verifies that the index of an element is found in a sorted list.
### For `find_max_recursive`:
- **finds_the_greatest_value**: Verifies that the maximum value is correctly found in a non-empty vector.
- **returns_zero_if_empty_vec_is_provided**: Ensures that an empty vector returns `0`.
### Running Tests
To run the tests for both functions, use the following command:
```bash
cargo test
```
## License
This crate is licensed under the MIT License.