From 248b67076fd1d9814aa2f568dfc048456ebdcd10 Mon Sep 17 00:00:00 2001 From: Nicholas Thompson Date: Mon, 20 Nov 2023 22:41:59 -0500 Subject: [PATCH] made equality tests smarter --- src/int.rs | 2 +- src/macros/cmp.rs | 11 +++++++++++ src/uint.rs | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/int.rs b/src/int.rs index 316e1e5..aeab02a 100644 --- a/src/int.rs +++ b/src/int.rs @@ -13,7 +13,7 @@ use crate::uint::U256; use core::num::ParseIntError; /// A 256-bit signed integer type. -#[derive(Clone, Copy, Default, Eq, Hash, PartialEq)] +#[derive(Clone, Copy, Default, Eq, Hash)] #[repr(transparent)] pub struct I256(pub [i128; 2]); diff --git a/src/macros/cmp.rs b/src/macros/cmp.rs index 21e2183..f9a9c0c 100644 --- a/src/macros/cmp.rs +++ b/src/macros/cmp.rs @@ -11,6 +11,17 @@ macro_rules! impl_cmp { } } + impl PartialEq for $int { + #[inline] + fn eq(&self, other: &Self) -> bool { + let (ahi, alo) = self.into_words(); + let (bhi, blo) = other.into_words(); + (ahi == bhi) & (alo == blo) + // bitwise and rather than logical and + // to make O0 code more effecient. + } + } + impl PartialEq<$prim> for $int { #[inline] fn eq(&self, other: &$prim) -> bool { diff --git a/src/uint.rs b/src/uint.rs index d446b67..8b28e5b 100644 --- a/src/uint.rs +++ b/src/uint.rs @@ -13,7 +13,7 @@ use crate::I256; use core::num::ParseIntError; /// A 256-bit unsigned integer type. -#[derive(Clone, Copy, Default, Eq, Hash, PartialEq)] +#[derive(Clone, Copy, Default, Eq, Hash)] #[repr(transparent)] pub struct U256(pub [u128; 2]);