pub fn bubble_sort<T>(array: &mut [T], comparator: fn(&T, &T) -> bool) -> () {
for point in (0..array.len()).rev() {
for current_point in 0..point {
if !comparator(&array[current_point], &array[current_point + 1]) {
array.swap(current_point, current_point + 1);
}
}
}
}
#[cfg(test)]
mod bubble_sort_tests {
use super::super::is_sorted;
use super::bubble_sort;
#[test]
fn empty() -> () {
let mut a: [i32; 0] = [];
bubble_sort(&mut a, |a, b| a <= b);
assert_eq!(is_sorted(&mut a, |a, b| a <= b), true);
}
#[test]
fn one_element() -> () {
let mut a: [i32; 1] = [1];
bubble_sort(&mut a, |a, b| a <= b);
assert_eq!(is_sorted(&mut a, |a, b| a <= b), true);
}
#[test]
fn positive() -> () {
let mut a = [1, 123, 123, 12, 4234, 42, 1123, 123, 15112, 312];
bubble_sort(&mut a, |a, b| a >= b);
assert_eq!(is_sorted(&mut a, |a, b| a >= b), true);
}
}