pub fn normalize_sequence(sequence: &str) -> String {
sequence.to_ascii_uppercase()
}
pub fn sort_positions(mut positions: Vec<i64>) -> Vec<i64> {
positions.sort_unstable();
positions
}
pub fn sort_ranges(mut ranges: Vec<[i64; 2]>) -> Vec<[i64; 2]> {
ranges.sort_unstable_by(|[a_s, a_e], [b_s, b_e]| a_s.cmp(b_s).then_with(|| a_e.cmp(b_e)));
ranges
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn sequence_is_uppercased() {
assert_eq!(normalize_sequence("maeprq"), "MAEPRQ");
assert_eq!(normalize_sequence("MaEp*"), "MAEP*");
}
#[test]
fn positions_sort_ascending_and_keep_duplicates() {
assert_eq!(sort_positions(vec![3, 1, 2]), vec![1, 2, 3]);
assert_eq!(sort_positions(vec![7, 3, 7]), vec![3, 7, 7]);
assert_eq!(sort_positions(vec![5, 0, -3]), vec![-3, 0, 5]);
}
#[test]
fn ranges_sort_by_start_then_end() {
assert_eq!(sort_ranges(vec![[5, 10], [1, 3]]), vec![[1, 3], [5, 10]]);
assert_eq!(sort_ranges(vec![[1, 9], [1, 3]]), vec![[1, 3], [1, 9]]);
assert_eq!(sort_ranges(vec![[12, 8], [3, 3]]), vec![[3, 3], [12, 8]]);
}
}