#[cfg(test)] mod tests { use crate::backend::bigint::BigInt;
#[test] fn test_creation() { let bigint = BigInt { digits: vec![1, 2, 3], sign: false }; assert_eq!(bigint.digits, vec![1, 2, 3]); }
#[test] fn test_comparison() { let a = BigInt { digits: vec![1, 2, 3], sign: false }; let b = BigInt { digits: vec![1, 2, 3], sign: false }; assert_eq!(a, b); let c = BigInt { digits: vec![1, 2, 4], sign: false }; assert_ne!(a, c); assert!(a < c); let d = BigInt { digits: vec![1, 9], sign: false }; assert!(a > d); let e = BigInt { digits: vec![1, 2, 3], sign: true }; assert!(e < a); }
#[test] fn test_negation() { let a = BigInt { digits: vec![1, 2, 3], sign: false }; let result = -a; assert_eq!(result.digits, vec![1, 2, 3]); assert_eq!(result.sign, true); }
#[test] fn test_addition() { let a = BigInt { digits: vec![6, 2, 3], sign: false }; let b = BigInt { digits: vec![4, 5, 6], sign: false }; let result = a + b; assert_eq!(result.digits, vec![0, 8, 9]); assert_eq!(result.sign, false); let d = BigInt { digits: vec![1, 2, 3], sign: false }; let c = BigInt { digits: vec![1, 2, 3], sign: true }; let result = d + c; assert_eq!(result, BigInt::zero()); let e = BigInt { digits: vec![1, 2, 3], sign: true }; let f = BigInt { digits: vec![1, 2, 2], sign: false }; let result = e + f; assert_eq!(result.digits, vec![0, 0, 1]); assert_eq!(result.sign, true); }
#[test] fn test_subtraction() { let a = BigInt { digits: vec![5, 1, 9], sign: false }; let b = BigInt { digits: vec![1, 2, 3], sign: false }; let result = a - b; assert_eq!(result.digits, vec![4, 9, 5]); assert_eq!(result.sign, false); let a = BigInt { digits: vec![1, 2, 3], sign: false }; let b = BigInt { digits: vec![5, 1, 9], sign: false }; let result = a - b; assert_eq!(result.digits, vec![4, 9, 5]); assert_eq!(result.sign, true); let a = BigInt { digits: vec![1, 2, 3], sign: true }; let b = BigInt { digits: vec![1, 2, 3], sign: false }; let result = a - b; assert_eq!(result.digits, vec![2, 4, 6]); assert_eq!(result.sign, true); let a = BigInt { digits: vec![1, 2, 3], sign: false }; let b = BigInt { digits: vec![1, 3, 3], sign: false }; let result = a - b; assert_eq!(result.digits, vec![0, 1]); assert_eq!(result.sign, true); }
#[test] fn test_multiplication() { let a = BigInt { digits: vec![1, 2, 3], sign: false }; let b = BigInt { digits: vec![4, 5, 6], sign: false }; let result = a * b; assert_eq!(result.digits, vec![4, 3, 9, 9, 0, 2]); assert_eq!(result.sign, false); let a = BigInt { digits: vec![1, 2, 3], sign: true }; let b = BigInt { digits: vec![4, 5, 6], sign: false }; let result = a * b; assert_eq!(result.digits, vec![4, 3, 9, 9, 0, 2]); assert_eq!(result.sign, true); }
#[test] fn test_division() { let a = BigInt { digits: vec![1, 2, 3], sign: false }; let b = BigInt { digits: vec![3], sign: false }; let result = a / b; assert_eq!(result.digits, vec![7, 0, 1]); assert_eq!(result.sign, false);
let a = BigInt { digits: vec![1, 2, 3], sign: true }; let b = BigInt { digits: vec![4], sign: false }; let result = a / b; assert_eq!(result.digits, vec![0, 8]); assert_eq!(result.sign, true);
}
#[test] fn test_remainder() { let a = BigInt { digits: vec![1, 2, 3], sign: false }; let b = BigInt { digits: vec![1, 2], sign: false }; let result = a % b; assert_eq!(result.digits, vec![6]); let c = BigInt { digits: vec![1, 2, 4], sign: false }; let a = BigInt { digits: vec![1, 2, 3], sign: false }; let result = c % a; assert_eq!(result.digits, vec![0, 0, 1]); let d = BigInt { digits: vec![1, 2, 3], sign: true }; let e = BigInt { digits: vec![1, 2, 3], sign: false }; let result = d % e; assert_eq!(result.digits, vec![0]); let d = BigInt { digits: vec![1, 2, 4], sign: true }; let e = BigInt { digits: vec![1, 2, 3], sign: false }; let result = d % e; assert_eq!(result.digits, vec![1, 2, 2]); assert_eq!(result.sign, false); }
#[test] fn test_pow() { let a = BigInt { digits: vec![2, 2], sign: false }; let result = a.pow(3); assert_eq!(result.digits, vec![8, 4, 6, 0, 1]); assert_eq!(result.sign, false); let a = BigInt { digits: vec![2, 2], sign: true }; let result = a.pow(3); assert_eq!(result.digits, vec![8, 4, 6, 0, 1]); assert_eq!(result.sign, true); }
#[test] fn test_mod_pow() { let a = BigInt { digits: vec![2, 1], sign: false }; let b = BigInt { digits: vec![9, 9], sign: false }; let result = a.mod_pow(3, b); assert_eq!(result.digits, vec![5, 4]); assert_eq!(result.sign, false); let a = BigInt { digits: vec![2, 1], sign: true }; let b = BigInt { digits: vec![9, 9], sign: false }; let result = a.mod_pow(3, b); assert_eq!(result.digits, vec![4, 5]); assert_eq!(result.sign, false); }
#[test] fn test_is_zero() { let a = BigInt { digits: vec![0], sign: false }; assert!(a.is_zero());
let b = BigInt { digits: vec![1], sign: false }; assert!(!b.is_zero()); }
#[test] fn test_is_one() { let a = BigInt { digits: vec![1], sign: false }; assert!(a.is_one());
let b = BigInt { digits: vec![0], sign: false }; assert!(!b.is_one()); }
#[test] fn test_is_negative() { let a = BigInt { digits: vec![-1], sign: false }; assert!(a.is_negative());
let b = BigInt { digits: vec![1], sign: false }; assert!(!b.is_negative()); }
#[test] fn test_gcd() { let a = BigInt { digits: vec![2, 2], sign: false }; let b = BigInt { digits: vec![3, 3], sign: false }; let result = a.gcd(&b); assert_eq!(result.digits, vec![1, 1]); assert_eq!(result.sign, false); let a = BigInt { digits: vec![3, 3], sign: true }; let b = BigInt { digits: vec![2, 2], sign: false }; let result = a.gcd(&b); assert_eq!(result.digits, vec![1, 1]); assert_eq!(result.sign, false); let a = BigInt { digits: vec![3, 3], sign: true }; let b = BigInt { digits: vec![3, 3], sign: false }; let result = a.gcd(&b); assert_eq!(result.digits, vec![3, 3]); assert_eq!(result.sign, false); }
#[test] fn test_abs() { let a = BigInt { digits: vec![1, 2, 3], sign: false }; let result = a.abs(); assert_eq!(result.digits, vec![1, 2, 3]); assert_eq!(result.sign, false);
let b = BigInt { digits: vec![1, 2, 3], sign: true }; let result = b.abs(); assert_eq!(result.digits, vec![1, 2, 3]); assert_eq!(result.sign, false); }
#[test] fn test_comparison_with_zero() { let a = BigInt { digits: vec![1, 2, 3], sign: false }; let b = BigInt { digits: vec![0], sign: false }; assert!(a > b); }
#[test] fn test_comparison_with_negative_zero() { let a = BigInt { digits: vec![0], sign: false }; let b = BigInt { digits: vec![-0], sign: false }; assert!(a == b); }
#[test] fn test_from_str() { let a = BigInt::from("123".to_string()); assert_eq!(a.digits, vec![3, 2, 1]);
let b = BigInt::from("00123".to_string()); assert_eq!(b.digits, vec![3, 2, 1]);
let c = BigInt::from("0".to_string()); assert_eq!(c.digits, vec![0]);
let d = BigInt::from("0000".to_string()); assert_eq!(d.digits, vec![0]);
let e = BigInt::from("9876543210".to_string()); assert_eq!(e.digits, vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); }
#[test] fn test_factorial() { let a = BigInt { digits: vec![0, 1], sign: false }; let result = a.factorial(); println!("{}", result.to_string()); } }
|