From d08b8eb8cb837033a41219bbba5aeafbd1a1daa6 Mon Sep 17 00:00:00 2001 From: Trevor Spiteri Date: Thu, 18 Feb 2021 13:46:38 +0100 Subject: [PATCH] implement num_traits::ops::overflowing::Overflowing{Add,Mul,Sub} --- .gitlab-ci.yml | 4 ++-- README.md | 12 ++++++++++++ RELEASES.md | 13 +++++++++++++ src/impl_num_traits.rs | 22 ++++++++++++++++++++++ src/traits.rs | 9 +++++++++ 5 files changed, 58 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d946b9d..143eaa7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -144,14 +144,14 @@ x86_64-gnulinux-tarpaulin: image: amd64/rust:1 variables: TARGET: x86_64 - REQ_COVERAGE: "79" + REQ_COVERAGE: "78.5" cache: key: $CI_JOB_NAME paths: - cargo/ script: - rustup toolchain install --profile minimal beta-$TARGET - - cargo +beta-$TARGET install --version 0.15.0 --locked cargo-tarpaulin + - cargo +beta-$TARGET install --version 0.16.0 --locked cargo-tarpaulin - stdbuf -oL cargo +beta-$TARGET tarpaulin -v --ignore-tests --exclude-files build.rs --features "az f16 num-traits serde std" | tee tarpaulin.log - echo "Check that coverage not less than $REQ_COVERAGE%" - tail -1 tarpaulin.log | awk '{ if ($1 < '$REQ_COVERAGE') { exit 1 } }' diff --git a/README.md b/README.md index edf62bc..500e097 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,18 @@ The conversions supported cover the following cases. ## What’s new +### Version 1.7.0 news (unreleased) + + * For the experimental feature [`num-traits`][feat-exp-1-7], the + following traits were implemented where applicable: + * [`OverflowingAdd`][nt-0-2-oa], [`OverflowingSub`][nt-0-2-os], + [`OverflowingMul`][nt-0-2-om] + +[feat-exp-1-7]: https://tspiteri.gitlab.io/fixed/dev/fixed/#experimental-optional-features +[nt-0-2-oa]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingAdd.html +[nt-0-2-om]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingMul.html +[nt-0-2-os]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingSub.html + ### Version 1.6.0 news (2021-02-05) * The crate now requires rustc version 1.47.0 or later. diff --git a/RELEASES.md b/RELEASES.md index 4439861..5788cea 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -5,6 +5,19 @@ modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. --> +Version 1.7.0 (unreleased) +========================== + + * For the experimental feature [`num-traits`][feat-exp-1-7], the + following traits were implemented where applicable: + * [`OverflowingAdd`][nt-0-2-oa], [`OverflowingSub`][nt-0-2-os], + [`OverflowingMul`][nt-0-2-om] + +[feat-exp-1-7]: https://tspiteri.gitlab.io/fixed/dev/fixed/#experimental-optional-features +[nt-0-2-oa]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingAdd.html +[nt-0-2-om]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingMul.html +[nt-0-2-os]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingSub.html + Version 1.6.0 (2021-02-05) ========================== diff --git a/src/impl_num_traits.rs b/src/impl_num_traits.rs index e929c48..31d3c6d 100644 --- a/src/impl_num_traits.rs +++ b/src/impl_num_traits.rs @@ -35,6 +35,7 @@ use num_traits::{ }, inv::Inv, mul_add::{MulAdd, MulAddAssign}, + overflowing::{OverflowingAdd, OverflowingMul, OverflowingSub}, saturating::{SaturatingAdd, SaturatingMul, SaturatingSub}, wrapping::{WrappingAdd, WrappingMul, WrappingNeg, WrappingShl, WrappingShr, WrappingSub}, }, @@ -298,6 +299,27 @@ macro_rules! impl_traits { } } + impl OverflowingAdd for $Fixed { + #[inline] + fn overflowing_add(&self, v: &Self) -> (Self, bool) { + (*self).overflowing_add(*v) + } + } + + impl OverflowingSub for $Fixed { + #[inline] + fn overflowing_sub(&self, v: &Self) -> (Self, bool) { + (*self).overflowing_sub(*v) + } + } + + impl OverflowingMul for $Fixed { + #[inline] + fn overflowing_mul(&self, v: &Self) -> (Self, bool) { + (*self).overflowing_mul(*v) + } + } + impl MulAdd<$Fixed> for $Fixed { type Output = $Fixed; #[inline] diff --git a/src/traits.rs b/src/traits.rs index e8d5f48..8d8cbbc 100644 --- a/src/traits.rs +++ b/src/traits.rs @@ -48,6 +48,7 @@ use num_traits::{ CheckedSub, }, inv::Inv, + overflowing::{OverflowingAdd, OverflowingMul, OverflowingSub}, saturating::{SaturatingAdd, SaturatingMul, SaturatingSub}, wrapping::{WrappingAdd, WrappingMul, WrappingNeg, WrappingShl, WrappingShr, WrappingSub}, }, @@ -85,6 +86,7 @@ macro_rules! comment_features { Self: SaturatingAdd + SaturatingSub + SaturatingMul, Self: WrappingAdd + WrappingSub + WrappingNeg + WrappingMul, Self: WrappingShl + WrappingShr, + Self: OverflowingAdd + OverflowingSub + OverflowingMul, Self: ToPrimitive + FromPrimitive + FloatConst, { } @@ -102,6 +104,7 @@ macro_rules! comment_features { Self: SaturatingAdd + SaturatingSub + SaturatingMul, Self: WrappingAdd + WrappingSub + WrappingNeg + WrappingMul, Self: WrappingShl + WrappingShr, + Self: OverflowingAdd + OverflowingSub + OverflowingMul, Self: ToPrimitive + FromPrimitive + FloatConst, Self: Serialize + for<'de> Deserialize<'de>, { @@ -138,6 +141,7 @@ macro_rules! comment_features { Self: SaturatingAdd + SaturatingSub + SaturatingMul, Self: WrappingAdd + WrappingSub + WrappingNeg + WrappingMul, Self: WrappingShl + WrappingShr, + Self: OverflowingAdd + OverflowingSub + OverflowingMul, Self: ToPrimitive + FromPrimitive + FloatConst, { } @@ -156,6 +160,7 @@ macro_rules! comment_features { Self: SaturatingAdd + SaturatingSub + SaturatingMul, Self: WrappingAdd + WrappingSub + WrappingNeg + WrappingMul, Self: WrappingShl + WrappingShr, + Self: OverflowingAdd + OverflowingSub + OverflowingMul, Self: ToPrimitive + FromPrimitive + FloatConst, Self: Serialize + for<'de> Deserialize<'de>, { @@ -183,6 +188,7 @@ depending on the crate’s [optional features]. * [`SaturatingAdd`], [`SaturatingSub`], [`SaturatingMul`] * [`WrappingAdd`], [`WrappingSub`], [`WrappingNeg`], [`WrappingMul`], [`WrappingShl`], [`WrappingShr`] + * [`OverflowingAdd`], [`OverflowingSub`], [`OverflowingMul`] * [`ToPrimitive`], [`FromPrimitive`] * [`FloatConst`] @@ -225,6 +231,9 @@ depending on the crate’s [optional features]. [`MulAdd`]: https://docs.rs/num-traits/^0.2/num_traits/ops/mul_add/trait.MulAdd.html [`Num`]: https://docs.rs/num-traits/^0.2/num_traits/trait.Num.html [`One`]: https://docs.rs/num-traits/^0.2/num_traits/identities/trait.One.html +[`OverflowingAdd`]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingAdd.html +[`OverflowingMul`]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingMul.html +[`OverflowingSub`]: https://docs.rs/num-traits/^0.2/num_traits/ops/overflowing/trait.OverflowingSub.html [`PartialOrd`]: https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html [`SaturatingAdd`]: https://docs.rs/num-traits/^0.2/num_traits/ops/saturating/trait.SaturatingAdd.html [`SaturatingMul`]: https://docs.rs/num-traits/^0.2/num_traits/ops/saturating/trait.SaturatingMul.html