From 6b9783c69a9ea8a3085a2772d5e2fe4e65f1c125 Mon Sep 17 00:00:00 2001 From: Adam Wick Date: Sat, 24 Mar 2018 12:03:29 -0700 Subject: [PATCH] Comparisons! --- Cargo.toml | 1 + src/cryptonum/mod.rs | 31 ++++++++++++++++++++----------- src/lib.rs | 5 +++-- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d710d2b..31333d2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ license-file = "LICENSE" repository = "https://github.com/acw/simple_crypto" [dependencies] +num = "^0.1.42" rand = "^0.3" [dev-dependencies] diff --git a/src/cryptonum/mod.rs b/src/cryptonum/mod.rs index 389e7b9..f4838d6 100644 --- a/src/cryptonum/mod.rs +++ b/src/cryptonum/mod.rs @@ -71,20 +71,23 @@ impl PartialOrd for UCN { impl Ord for UCN { fn cmp(&self, other: &UCN) -> Ordering { - let mut iter_left = self.contents.iter(); - let mut iter_right = other.contents.iter(); + match self.contents.len().cmp(&other.contents.len()) { + Ordering::Equal => { + let mut me = self.contents.iter().rev(); + let mut them = other.contents.iter().rev(); - loop { - match (iter_left.next(), iter_right.next()) { - (None, None) => return Ordering::Equal, - (Some(_), None) => return Ordering::Greater, - (None, Some(_)) => return Ordering::Less, - (Some(x), Some(y)) => - match x.cmp(y) { - Ordering::Equal => continue, - result => return result + for (m, t) in me.zip(them) { + match m.cmp(t) { + Ordering::Equal => + continue, + res => + return res } + } + + Ordering::Equal } + x => x } } } @@ -161,5 +164,11 @@ mod test { ucnx.cmp(&ucny) == Ordering::Greater } } + fn self_is_equal(x: Vec) -> bool { + let val = UCN{ contents: x }; + let copy = val.clone(); + + (&val == ©) && (val.cmp(©) == Ordering::Equal) + } } } diff --git a/src/lib.rs b/src/lib.rs index a7e37fb..de9bd57 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,13 +11,14 @@ //! when they should use it, and examples. For now, it mostly just fowards //! off to more detailed modules. Help requested! +extern crate num; #[cfg(test)] #[macro_use] extern crate quickcheck; extern crate rand; -/// The cryptonum module provides support for large numbers at fixed, -/// cryptographically-relevant sizes. +/// The cryptonum module provides support for large numbers for use in various +/// cryptographically-relevant algorithms. pub mod cryptonum; #[cfg(test)]