|
@@ -75,7 +75,7 @@ pub type BigDigit = u32;
|
|
|
/// size is the double of the size of `BigDigit`.
|
|
|
pub type DoubleBigDigit = u64;
|
|
|
|
|
|
-pub static ZERO_BIG_DIGIT: BigDigit = 0;
|
|
|
+pub const ZERO_BIG_DIGIT: BigDigit = 0;
|
|
|
static ZERO_VEC: [BigDigit, ..1] = [ZERO_BIG_DIGIT];
|
|
|
|
|
|
#[allow(non_snake_case)]
|
|
@@ -84,15 +84,15 @@ pub mod BigDigit {
|
|
|
use super::DoubleBigDigit;
|
|
|
|
|
|
// `DoubleBigDigit` size dependent
|
|
|
- pub static bits: uint = 32;
|
|
|
+ pub const bits: uint = 32;
|
|
|
|
|
|
- pub static base: DoubleBigDigit = 1 << bits;
|
|
|
- static lo_mask: DoubleBigDigit = (-1 as DoubleBigDigit) >> bits;
|
|
|
+ pub const base: DoubleBigDigit = 1 << bits;
|
|
|
+ const LO_MASK: DoubleBigDigit = (-1 as DoubleBigDigit) >> bits;
|
|
|
|
|
|
#[inline]
|
|
|
fn get_hi(n: DoubleBigDigit) -> BigDigit { (n >> bits) as BigDigit }
|
|
|
#[inline]
|
|
|
- fn get_lo(n: DoubleBigDigit) -> BigDigit { (n & lo_mask) as BigDigit }
|
|
|
+ fn get_lo(n: DoubleBigDigit) -> BigDigit { (n & LO_MASK) as BigDigit }
|
|
|
|
|
|
/// Split one `DoubleBigDigit` into two `BigDigit`s.
|
|
|
#[inline]
|
|
@@ -1839,9 +1839,9 @@ mod biguint_tests {
|
|
|
BigInt::from_biguint(Plus, BigUint::new(vec!(1,2,3))));
|
|
|
}
|
|
|
|
|
|
- static sum_triples: &'static [(&'static [BigDigit],
|
|
|
- &'static [BigDigit],
|
|
|
- &'static [BigDigit])] = &[
|
|
|
+ const SUM_TRIPLES: &'static [(&'static [BigDigit],
|
|
|
+ &'static [BigDigit],
|
|
|
+ &'static [BigDigit])] = &[
|
|
|
(&[], &[], &[]),
|
|
|
(&[], &[ 1], &[ 1]),
|
|
|
(&[ 1], &[ 1], &[ 2]),
|
|
@@ -1855,7 +1855,7 @@ mod biguint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_add() {
|
|
|
- for elm in sum_triples.iter() {
|
|
|
+ for elm in SUM_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -1868,7 +1868,7 @@ mod biguint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_sub() {
|
|
|
- for elm in sum_triples.iter() {
|
|
|
+ for elm in SUM_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -1886,9 +1886,9 @@ mod biguint_tests {
|
|
|
a - b;
|
|
|
}
|
|
|
|
|
|
- static mul_triples: &'static [(&'static [BigDigit],
|
|
|
- &'static [BigDigit],
|
|
|
- &'static [BigDigit])] = &[
|
|
|
+ const MUL_TRIPLES: &'static [(&'static [BigDigit],
|
|
|
+ &'static [BigDigit],
|
|
|
+ &'static [BigDigit])] = &[
|
|
|
(&[], &[], &[]),
|
|
|
(&[], &[ 1], &[]),
|
|
|
(&[ 2], &[], &[]),
|
|
@@ -1912,10 +1912,10 @@ mod biguint_tests {
|
|
|
(&[ 0, 0, 1], &[ 0, 0, 0, 1], &[0, 0, 0, 0, 0, 1])
|
|
|
];
|
|
|
|
|
|
- static div_rem_quadruples: &'static [(&'static [BigDigit],
|
|
|
- &'static [BigDigit],
|
|
|
- &'static [BigDigit],
|
|
|
- &'static [BigDigit])]
|
|
|
+ const DIV_REM_QUADRUPLES: &'static [(&'static [BigDigit],
|
|
|
+ &'static [BigDigit],
|
|
|
+ &'static [BigDigit],
|
|
|
+ &'static [BigDigit])]
|
|
|
= &[
|
|
|
(&[ 1], &[ 2], &[], &[1]),
|
|
|
(&[ 1, 1], &[ 2], &[-1/2+1], &[1]),
|
|
@@ -1926,7 +1926,7 @@ mod biguint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_mul() {
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -1936,7 +1936,7 @@ mod biguint_tests {
|
|
|
assert!(b * a == c);
|
|
|
}
|
|
|
|
|
|
- for elm in div_rem_quadruples.iter() {
|
|
|
+ for elm in DIV_REM_QUADRUPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec, d_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -1950,7 +1950,7 @@ mod biguint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_div_rem() {
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -1964,7 +1964,7 @@ mod biguint_tests {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- for elm in div_rem_quadruples.iter() {
|
|
|
+ for elm in DIV_REM_QUADRUPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec, d_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -1977,7 +1977,7 @@ mod biguint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_checked_add() {
|
|
|
- for elm in sum_triples.iter() {
|
|
|
+ for elm in SUM_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -1990,7 +1990,7 @@ mod biguint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_checked_sub() {
|
|
|
- for elm in sum_triples.iter() {
|
|
|
+ for elm in SUM_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -2010,7 +2010,7 @@ mod biguint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_checked_mul() {
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -2020,7 +2020,7 @@ mod biguint_tests {
|
|
|
assert!(b.checked_mul(&a).unwrap() == c);
|
|
|
}
|
|
|
|
|
|
- for elm in div_rem_quadruples.iter() {
|
|
|
+ for elm in DIV_REM_QUADRUPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec, d_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -2034,7 +2034,7 @@ mod biguint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_checked_div() {
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigUint::from_slice(a_vec);
|
|
|
let b = BigUint::from_slice(b_vec);
|
|
@@ -2438,9 +2438,9 @@ mod bigint_tests {
|
|
|
assert_eq!(negative.to_biguint(), None);
|
|
|
}
|
|
|
|
|
|
- static sum_triples: &'static [(&'static [BigDigit],
|
|
|
- &'static [BigDigit],
|
|
|
- &'static [BigDigit])] = &[
|
|
|
+ const SUM_TRIPLES: &'static [(&'static [BigDigit],
|
|
|
+ &'static [BigDigit],
|
|
|
+ &'static [BigDigit])] = &[
|
|
|
(&[], &[], &[]),
|
|
|
(&[], &[ 1], &[ 1]),
|
|
|
(&[ 1], &[ 1], &[ 2]),
|
|
@@ -2454,7 +2454,7 @@ mod bigint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_add() {
|
|
|
- for elm in sum_triples.iter() {
|
|
|
+ for elm in SUM_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2473,7 +2473,7 @@ mod bigint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_sub() {
|
|
|
- for elm in sum_triples.iter() {
|
|
|
+ for elm in SUM_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2490,7 +2490,7 @@ mod bigint_tests {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- static mul_triples: &'static [(&'static [BigDigit],
|
|
|
+ static MUL_TRIPLES: &'static [(&'static [BigDigit],
|
|
|
&'static [BigDigit],
|
|
|
&'static [BigDigit])] = &[
|
|
|
(&[], &[], &[]),
|
|
@@ -2516,7 +2516,7 @@ mod bigint_tests {
|
|
|
(&[ 0, 0, 1], &[ 0, 0, 0, 1], &[0, 0, 0, 0, 0, 1])
|
|
|
];
|
|
|
|
|
|
- static div_rem_quadruples: &'static [(&'static [BigDigit],
|
|
|
+ static DIV_REM_QUADRUPLES: &'static [(&'static [BigDigit],
|
|
|
&'static [BigDigit],
|
|
|
&'static [BigDigit],
|
|
|
&'static [BigDigit])]
|
|
@@ -2530,7 +2530,7 @@ mod bigint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_mul() {
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2543,7 +2543,7 @@ mod bigint_tests {
|
|
|
assert!((-b) * a == -c);
|
|
|
}
|
|
|
|
|
|
- for elm in div_rem_quadruples.iter() {
|
|
|
+ for elm in DIV_REM_QUADRUPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec, d_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2582,7 +2582,7 @@ mod bigint_tests {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2592,7 +2592,7 @@ mod bigint_tests {
|
|
|
if !b.is_zero() { check(&c, &b, &a, &Zero::zero()); }
|
|
|
}
|
|
|
|
|
|
- for elm in div_rem_quadruples.iter() {
|
|
|
+ for elm in DIV_REM_QUADRUPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec, d_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2625,7 +2625,7 @@ mod bigint_tests {
|
|
|
check_sub(&a.neg(), b, &q.neg(), &r.neg());
|
|
|
check_sub(&a.neg(), &b.neg(), q, &r.neg());
|
|
|
}
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2635,7 +2635,7 @@ mod bigint_tests {
|
|
|
if !b.is_zero() { check(&c, &b, &a, &Zero::zero()); }
|
|
|
}
|
|
|
|
|
|
- for elm in div_rem_quadruples.iter() {
|
|
|
+ for elm in DIV_REM_QUADRUPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec, d_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2650,7 +2650,7 @@ mod bigint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_checked_add() {
|
|
|
- for elm in sum_triples.iter() {
|
|
|
+ for elm in SUM_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2669,7 +2669,7 @@ mod bigint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_checked_sub() {
|
|
|
- for elm in sum_triples.iter() {
|
|
|
+ for elm in SUM_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2688,7 +2688,7 @@ mod bigint_tests {
|
|
|
|
|
|
#[test]
|
|
|
fn test_checked_mul() {
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2701,7 +2701,7 @@ mod bigint_tests {
|
|
|
assert!((-b).checked_mul(&a).unwrap() == -c);
|
|
|
}
|
|
|
|
|
|
- for elm in div_rem_quadruples.iter() {
|
|
|
+ for elm in DIV_REM_QUADRUPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec, d_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|
|
@@ -2714,7 +2714,7 @@ mod bigint_tests {
|
|
|
}
|
|
|
#[test]
|
|
|
fn test_checked_div() {
|
|
|
- for elm in mul_triples.iter() {
|
|
|
+ for elm in MUL_TRIPLES.iter() {
|
|
|
let (a_vec, b_vec, c_vec) = *elm;
|
|
|
let a = BigInt::from_slice(Plus, a_vec);
|
|
|
let b = BigInt::from_slice(Plus, b_vec);
|