macro_rules! unroll_n {
(1, |$i:ident = {$e:expr}| $s:stmt, $inc:expr) => { let mut $i: usize = $e; $s };
(2, |$i:ident = {$e:expr}| $s:stmt, $inc:expr) => { unroll_n!(1, |$i = {$e}| $s, $inc); $inc; $s };
(3, |$i:ident = {$e:expr}| $s:stmt, $inc:expr) => { unroll_n!(2, |$i = {$e}| $s, $inc); $inc; $s };
(4, |$i:ident = {$e:expr}| $s:stmt, $inc:expr) => { unroll_n!(3, |$i = {$e}| $s, $inc); $inc; $s };
(5, |$i:ident = {$e:expr}| $s:stmt, $inc:expr) => { unroll_n!(4, |$i = {$e}| $s, $inc); $inc; $s };
(6, |$i:ident = {$e:expr}| $s:stmt, $inc:expr) => { unroll_n!(5, |$i = {$e}| $s, $inc); $inc; $s };
(7, |$i:ident = {$e:expr}| $s:stmt, $inc:expr) => { unroll_n!(6, |$i = {$e}| $s, $inc); $inc; $s };
(8, |$i:ident = {$e:expr}| $s:stmt, $inc:expr) => { unroll_n!(7, |$i = {$e}| $s, $inc); $inc; $s };
}
pub(crate) use unroll_n;