added proptesting for TandemSort
This commit is contained in:
+10
-1
@@ -9,4 +9,13 @@ tracing = ["rosu-map/tracing"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rosu-map = { path = "../rosu-map" }
|
rosu-map = { path = "../rosu-map" }
|
||||||
thiserror = { version = "1.0.50" }
|
thiserror = { version = "1.0.50" }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
proptest = "1.4.0"
|
||||||
|
|
||||||
|
[profile.test.package.proptest]
|
||||||
|
opt-level = 3
|
||||||
|
|
||||||
|
[profile.test.package.rand_chacha]
|
||||||
|
opt-level = 3
|
||||||
+24
-9
@@ -107,18 +107,33 @@ impl TandemSorter {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use proptest::prelude::*;
|
||||||
|
|
||||||
use super::TandemSorter;
|
use super::TandemSorter;
|
||||||
|
|
||||||
#[test]
|
proptest! {
|
||||||
fn sort() {
|
#![proptest_config(ProptestConfig::with_cases(10_000))]
|
||||||
let mut base = vec![9, 7, 8, 1, 4, 3, 5, 2];
|
|
||||||
let mut other = "hello World".chars().collect::<Vec<_>>();
|
|
||||||
let mut sorter = TandemSorter::new_stable(&base, u8::cmp);
|
|
||||||
|
|
||||||
sorter.sort(&mut base);
|
#[test]
|
||||||
assert_eq!(base, vec![1, 2, 3, 4, 5, 7, 8, 9]);
|
fn sort(mut actual in prop::collection::vec(0_u8..100, 0..100)) {
|
||||||
|
let mut expected = actual.clone();
|
||||||
|
expected.sort_unstable();
|
||||||
|
|
||||||
sorter.sort(&mut other);
|
let mut sorter = TandemSorter::new_unstable(&actual, u8::cmp);
|
||||||
assert_eq!(other.iter().collect::<String>(), "lo oWelhrld");
|
sorter.sort(&mut actual);
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn unsort(mut actual in prop::collection::vec(0_u8..100, 0..100)) {
|
||||||
|
let expected = actual.clone();
|
||||||
|
|
||||||
|
let mut sorter = TandemSorter::new_unstable(&actual, u8::cmp);
|
||||||
|
sorter.sort(&mut actual);
|
||||||
|
sorter.unsort(&mut actual);
|
||||||
|
|
||||||
|
assert_eq!(actual, expected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user