implement num_traits::ops::overflowing::Overflowing{Add,Mul,Sub}

This commit is contained in:
Trevor Spiteri 2021-02-18 13:46:38 +01:00
parent 38a132ec88
commit d08b8eb8cb
5 changed files with 58 additions and 2 deletions

View File

@ -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 } }'

View File

@ -79,6 +79,18 @@ The conversions supported cover the following cases.
## Whats 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.

View File

@ -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)
==========================

View File

@ -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<Frac> OverflowingAdd for $Fixed<Frac> {
#[inline]
fn overflowing_add(&self, v: &Self) -> (Self, bool) {
(*self).overflowing_add(*v)
}
}
impl<Frac> OverflowingSub for $Fixed<Frac> {
#[inline]
fn overflowing_sub(&self, v: &Self) -> (Self, bool) {
(*self).overflowing_sub(*v)
}
}
impl<Frac: $LeEqU> OverflowingMul for $Fixed<Frac> {
#[inline]
fn overflowing_mul(&self, v: &Self) -> (Self, bool) {
(*self).overflowing_mul(*v)
}
}
impl<Frac, MulFrac: $LeEqU> MulAdd<$Fixed<MulFrac>> for $Fixed<Frac> {
type Output = $Fixed<Frac>;
#[inline]

View File

@ -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 crates [optional features].
* [`SaturatingAdd`], [`SaturatingSub`], [`SaturatingMul`]
* [`WrappingAdd`], [`WrappingSub`], [`WrappingNeg`],
[`WrappingMul`], [`WrappingShl`], [`WrappingShr`]
* [`OverflowingAdd`], [`OverflowingSub`], [`OverflowingMul`]
* [`ToPrimitive`], [`FromPrimitive`]
* [`FloatConst`]
@ -225,6 +231,9 @@ depending on the crates [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