From 3e8c67506a6afdb0c102f016462379557e4f8f47 Mon Sep 17 00:00:00 2001 From: Kaido Kert Date: Fri, 14 Feb 2025 16:42:24 -0800 Subject: [PATCH] Add OverflowingAdd and OverflowingSub impls --- src/bint/numtraits.rs | 1 + src/buint/numtraits.rs | 2 ++ src/int/numtraits.rs | 9 +++++++++ 3 files changed, 12 insertions(+) diff --git a/src/bint/numtraits.rs b/src/bint/numtraits.rs index 9114711..5483b51 100644 --- a/src/bint/numtraits.rs +++ b/src/bint/numtraits.rs @@ -164,6 +164,7 @@ use num_traits::{ Saturating, SaturatingAdd, SaturatingMul, SaturatingSub, Signed, ToPrimitive, WrappingAdd, WrappingMul, WrappingNeg, WrappingShl, WrappingShr, WrappingSub, Zero, //ConstZero }; +use num_traits::ops::overflowing::{OverflowingAdd, OverflowingSub}; use crate::cast::CastFrom; use crate::int::numtraits::num_trait_impl; diff --git a/src/buint/numtraits.rs b/src/buint/numtraits.rs index 5a13eac..b47f526 100644 --- a/src/buint/numtraits.rs +++ b/src/buint/numtraits.rs @@ -58,6 +58,8 @@ use num_traits::{ Saturating, SaturatingAdd, SaturatingMul, SaturatingSub, ToPrimitive, Unsigned, WrappingAdd, WrappingMul, WrappingNeg, WrappingShl, WrappingShr, WrappingSub, Zero, //ConstZero }; +use num_traits::ops::overflowing::{OverflowingAdd, OverflowingSub}; + use crate::cast::CastFrom; use crate::int::numtraits::num_trait_impl; diff --git a/src/int/numtraits.rs b/src/int/numtraits.rs index 3c2333a..e16adc4 100644 --- a/src/int/numtraits.rs +++ b/src/int/numtraits.rs @@ -69,6 +69,9 @@ macro_rules! impls { num_trait_impl!($Int, WrappingMul, wrapping_mul, Self); num_trait_impl!($Int, WrappingSub, wrapping_sub, Self); + num_trait_impl!($Int, OverflowingAdd, overflowing_add, (Self, bool)); + num_trait_impl!($Int, OverflowingSub, overflowing_sub, (Self, bool)); + impl CheckedNeg for $Int { #[inline] fn checked_neg(&self) -> Option { @@ -427,9 +430,15 @@ macro_rules! tests { test_bignum! { function: <$int as WrappingAdd>::wrapping_add(a: ref &$int, b: ref &$int) } + test_bignum! { + function: <$int as OverflowingAdd>::overflowing_add(a: ref &$int, b: ref &$int) + } test_bignum! { function: <$int as WrappingSub>::wrapping_sub(a: ref &$int, b: ref &$int) } + test_bignum! { + function: <$int as OverflowingSub>::overflowing_sub(a: ref &$int, b: ref &$int) + } test_bignum! { function: <$int as WrappingMul>::wrapping_mul(a: ref &$int, b: ref &$int) }