From: Simon Tatham Date: Sun, 13 Apr 2025 07:02:53 +0000 (+0100) Subject: Bug in conversion from slice X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=8500dfae515ec4c90ece03b695d6c81ed90893f5;p=nimber.git Bug in conversion from slice I forgot the analogue of truncating the Vec. But here we can truncate while it's still in cheap slice form, before making a Vec at all. --- diff --git a/src/finitenimber.rs b/src/finitenimber.rs index cb76756..782ff21 100644 --- a/src/finitenimber.rs +++ b/src/finitenimber.rs @@ -284,15 +284,17 @@ impl From> for FiniteNimber { impl From<&[Word]> for FiniteNimber { fn from(slice: &[Word]) -> FiniteNimber { - match slice + match dbg!(slice .iter() .enumerate() .rev() - .find(|(_index, word)| **word != 0) + .find(|(_index, word)| **word != 0)) { None => Self(FiniteNimberEnum::Single(0)), Some((0, w)) => Self(FiniteNimberEnum::Single(*w)), - Some(_) => Self(FiniteNimberEnum::Vector(slice.into())) + Some((pos, _)) => { + Self(FiniteNimberEnum::Vector(slice[..=pos].into())) + } } } }