use core::mem;
use core::ops::Range;
use tiny_vec::{TinyVec};
fn mutate_slice(slice: &mut [u16]) {
for e in slice {
*e *= 2;
}
}
fn process_iter<const N: usize>(range: Range<u16>) {
let mut collected: TinyVec<u16, N> = range.clone().collect();
mutate_slice(&mut collected);
println!("\n Range: {range:?} ({} elements)", range.end - range.start);
println!(" Result: {collected:?}\n Used heap: {}", !collected.lives_on_stack());
}
fn run<const N: usize>() {
process_iter::<N>(0..10);
process_iter::<N>(3..11);
process_iter::<N>(0..30);
process_iter::<N>(4..7);
}
pub fn main() {
const DEF: usize = tiny_vec::n_elements_for_stack::<u16>();
let stack_size: usize = mem::size_of::<TinyVec<u16, DEF>>();
println!("Using a TinyVec with the default stack size ({DEF}). (Size = {stack_size})");
run::<DEF>();
let stack_size: usize = mem::size_of::<TinyVec<u16, 10>>();
println!("\nUsing a TinyVec with a custom stack size of 10. (Size = {stack_size})");
run::<10>();
}