Finish implementing sort and shuffle features
This commit is contained in:
parent
f73cc8f7ea
commit
3f5e621b6b
@ -108,13 +108,19 @@ fn sort_sheets(sheets: &mut FactoryVecDeque<SheetModel>) {
|
|||||||
fn order_sheets(sheets: &mut FactoryVecDeque<SheetModel>, order: &mut Vec<usize>) {
|
fn order_sheets(sheets: &mut FactoryVecDeque<SheetModel>, order: &mut Vec<usize>) {
|
||||||
assert!(sheets.len() == order.len());
|
assert!(sheets.len() == order.len());
|
||||||
|
|
||||||
|
let mut wish_positions = vec![0; sheets.len()];
|
||||||
|
for (i, i2) in order.iter().enumerate() {
|
||||||
|
wish_positions[*i2] = i;
|
||||||
|
}
|
||||||
|
|
||||||
for i in 0..sheets.len() {
|
for i in 0..sheets.len() {
|
||||||
let new_i = order[i];
|
let new_i = order[i];
|
||||||
let old_i = i;
|
let old_i = i;
|
||||||
|
|
||||||
if old_i != new_i {
|
if old_i != new_i {
|
||||||
|
order.swap(old_i, wish_positions[old_i]);
|
||||||
|
wish_positions.swap(old_i, new_i);
|
||||||
sheets.guard().swap(old_i, new_i);
|
sheets.guard().swap(old_i, new_i);
|
||||||
order.swap(old_i, new_i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -126,7 +132,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_sort() {
|
fn test_sort() {
|
||||||
let original: Vec<usize> = (0..10).collect();
|
let original: Vec<usize> = (0..100).collect();
|
||||||
let mut to_sort = original.clone();
|
let mut to_sort = original.clone();
|
||||||
to_sort.shuffle(&mut rand::thread_rng());
|
to_sort.shuffle(&mut rand::thread_rng());
|
||||||
|
|
||||||
@ -136,14 +142,22 @@ mod tests {
|
|||||||
order_builder.sort_by(|a, b| a.1.cmp(&b.1));
|
order_builder.sort_by(|a, b| a.1.cmp(&b.1));
|
||||||
let mut order: Vec<_> = order_builder.into_iter().map(|(i, _)| i).collect();
|
let mut order: Vec<_> = order_builder.into_iter().map(|(i, _)| i).collect();
|
||||||
|
|
||||||
|
println!("Initial order: {:?}", order);
|
||||||
|
|
||||||
|
let mut wish_positions = vec![0; to_sort.len()];
|
||||||
|
for (i, i2) in order.iter().enumerate() {
|
||||||
|
wish_positions[*i2] = i;
|
||||||
|
}
|
||||||
|
|
||||||
for i in 0..to_sort.len() {
|
for i in 0..to_sort.len() {
|
||||||
let new_i = order[i];
|
let new_i = order[i];
|
||||||
let old_i = i;
|
let old_i = i;
|
||||||
|
|
||||||
println!("Swap {} and {}", old_i, new_i);
|
println!("Swap {} and {}", old_i, new_i);
|
||||||
if old_i != new_i {
|
if old_i != new_i {
|
||||||
|
order.swap(old_i, wish_positions[old_i]);
|
||||||
|
wish_positions.swap(old_i, new_i);
|
||||||
to_sort.swap(old_i, new_i);
|
to_sort.swap(old_i, new_i);
|
||||||
order.swap(old_i, new_i);
|
|
||||||
}
|
}
|
||||||
println!("order: {:?} - to_sort: {:?}", order, to_sort);
|
println!("order: {:?} - to_sort: {:?}", order, to_sort);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user