Add some property testing, and fix a bug it found.
This commit is contained in:
46
src/lib.rs
46
src/lib.rs
@@ -1,5 +1,3 @@
|
||||
#![recursion_limit="1024"]
|
||||
|
||||
#[cfg(test)]
|
||||
#[macro_use]
|
||||
extern crate quickcheck;
|
||||
@@ -7,4 +5,46 @@ extern crate quickcheck;
|
||||
pub mod signed;
|
||||
pub mod unsigned;
|
||||
#[cfg(test)]
|
||||
pub mod testing;
|
||||
pub mod testing;
|
||||
|
||||
#[cfg(test)]
|
||||
mod arithmetic {
|
||||
use super::signed::*;
|
||||
use super::unsigned::*;
|
||||
|
||||
quickcheck! {
|
||||
fn commutivity_signed_add(x: I576, y: I576) -> bool {
|
||||
(&x + &y) == (&y + &x)
|
||||
}
|
||||
fn commutivity_unsigned_add(x: U576, y: U576) -> bool {
|
||||
(&x + &y) == (&y + &x)
|
||||
}
|
||||
fn commutivity_unsigned_mul(x: U192, y: U192) -> bool {
|
||||
(&x * &y) == (&y * &x)
|
||||
}
|
||||
|
||||
fn associativity_unsigned_add(x: U192, y: U192, z: U192) -> bool {
|
||||
(U256::from(&x) + (&y + &z)) == ((&x + &y) + U256::from(&z))
|
||||
}
|
||||
fn associativity_unsigned_mul(x: U192, y: U192, z: U192) -> bool {
|
||||
(U384::from(&x) * (&y * &z)) == ((&x * &y) * U384::from(&z))
|
||||
}
|
||||
|
||||
fn identity_signed_add(x: I576) -> bool {
|
||||
(&x + I576::zero()) == I640::from(&x)
|
||||
}
|
||||
fn identity_unsigned_add(x: U576) -> bool {
|
||||
(&x + U576::zero()) == U640::from(&x)
|
||||
}
|
||||
fn identity_unsigned_mul(x: U192) -> bool {
|
||||
(&x * U192::from(1u64)) == U384::from(&x)
|
||||
}
|
||||
|
||||
fn additive_inverse(x: I576) -> bool {
|
||||
(&x + x.negate()) == I640::zero()
|
||||
}
|
||||
fn distribution(x: U192, y: U192, z: U192) -> bool {
|
||||
(U256::from(&x) * (&y + &z)) == U512::from((&x * &y) + (&x * &z))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user