From edd7c7fee3805351ec0b895f1ace476736b493a3 Mon Sep 17 00:00:00 2001 From: Adam Wick Date: Sat, 24 Mar 2018 13:06:50 -0700 Subject: [PATCH] Add a shrink function to clean up 0s at the end of numbers. --- src/cryptonum/mod.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/cryptonum/mod.rs b/src/cryptonum/mod.rs index f4838d6..994a2d9 100644 --- a/src/cryptonum/mod.rs +++ b/src/cryptonum/mod.rs @@ -10,6 +10,23 @@ pub struct UCN { contents: Vec } +impl UCN { + fn shrink(&mut self) { + loop { + match self.contents.pop() { + None => + break, + Some(0) => + continue, + Some(x) => { + self.contents.push(x); + break + } + } + } + } +} + //------------------------------------------------------------------------------ // // Conversions to/from crypto nums. @@ -104,6 +121,25 @@ mod test { use quickcheck::{Arbitrary,Gen}; use super::*; + #[test] + fn test_shrink() { + let mut val1 = UCN{ contents: vec![1,0,0] }; + val1.shrink(); + assert_eq!(val1, UCN{ contents: vec![1] }); + // + let mut val2 = UCN{ contents: vec![0,0,0] }; + val2.shrink(); + assert_eq!(val2, UCN{ contents: vec![] }); + // + let mut val3 = UCN{ contents: vec![1,0,1] }; + val3.shrink(); + assert_eq!(val3, UCN{ contents: vec![1,0,1] }); + // + let mut val4 = UCN{ contents: vec![] }; + val4.shrink(); + assert_eq!(val4, UCN{ contents: vec![] }); + } + #[test] #[allow(overflowing_literals)] fn test_builders() {