#![feature(is_sorted)]
use rand::prelude::*;
pub fn bogosort<T: PartialOrd>(input: &mut [T]) {
if input.is_empty() {
return;
}
let mut rng = rand::thread_rng();
while !input.iter().is_sorted() {
input.shuffle(&mut rng);
}
}
#[test]
fn small_random() {
let mut test = vec![4, 2, 1, 5, 3];
let oracle = vec![1, 2, 3, 4, 5];
bogosort(&mut test);
assert_eq!(oracle, test);
}
#[test]
fn small_alternating() {
let mut test = vec![1, 2, 1, 2, 1];
let oracle = vec![1, 1, 1, 2, 2];
bogosort(&mut test);
assert_eq!(oracle, test);
}
#[test]
fn small_same() {
let mut test = vec![0;5];
let oracle = vec![0;5];
bogosort(&mut test);
assert_eq!(oracle, test);
}
#[test]
fn empty() {
let mut test: Vec<i32> = Vec::new();
let oracle: Vec<i32> = Vec::new();
bogosort(&mut test);
assert_eq!(oracle, test);
}
#[test]
fn single() {
let mut test = vec![1];
let oracle = vec![1];
bogosort(&mut test);
assert_eq!(oracle, test);
}
#[test]
fn small_sorted() {
let mut test = vec![1, 2, 3, 4, 5];
let oracle = vec![1, 2, 3, 4, 5];
bogosort(&mut test);
assert_eq!(oracle, test);
}