Add some property testing, and fix a bug it found.

This commit is contained in:
2018-11-06 21:53:47 -08:00
parent ccde640f99
commit de5ff87f9e
6 changed files with 75 additions and 25 deletions

View File

@@ -60,16 +60,19 @@ macro_rules! add_impls
value: &self.value + &rhs.value
}
} else {
if self.value > rhs.value {
$bigger {
negative: self.negative,
value: $ubigger::from(&self.value - &rhs.value)
}
} else {
$bigger {
negative: rhs.negative,
value: $ubigger::from(&rhs.value - &self.value)
}
match self.value.cmp(&rhs.value) {
Ordering::Greater =>
$bigger {
negative: self.negative,
value: $ubigger::from(&self.value - &rhs.value)
},
Ordering::Less =>
$bigger {
negative: rhs.negative,
value: $ubigger::from(&rhs.value - &self.value)
},
Ordering::Equal =>
$bigger::zero()
}
}
}

View File

@@ -85,16 +85,18 @@ macro_rules! signed_impls {
}
}
// #[cfg(test)]
// impl Arbitrary for $sname {
// fn arbitrary<G: Gen>(g: &mut G) -> $name {
// let neg = g.gen::<bool>();
// let val = g.gen::<$name>();
// $sname{ negative: neg, value: val }
// }
// }
#[cfg(test)]
impl Arbitrary for $sname {
fn arbitrary<G>(g: &mut G) -> $sname
where G: Gen
{
let neg = bool::arbitrary(g);
let val = $name::arbitrary(g);
let neg2 = if val.is_zero() { false } else { neg };
$sname{ negative: neg2, value: val }
}
}
impl fmt::Debug for $sname {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
if self.negative {

View File

@@ -26,6 +26,8 @@ mod shift;
#[macro_use]
mod subtraction;
#[cfg(test)]
use quickcheck::{Arbitrary,Gen};
use std::cmp::{Ord,Ordering,PartialOrd};
use std::fmt;
use std::ops::{Add,AddAssign};