use fixed_bigint::FixedUInt;
#[test]
fn test_sum() {
type TestInt = FixedUInt<u32, 2>;
let values = vec![
TestInt::from(1u8),
TestInt::from(2u8),
TestInt::from(3u8),
TestInt::from(4u8),
TestInt::from(5u8),
];
let sum: TestInt = values.iter().cloned().sum();
assert_eq!(sum, TestInt::from(15u8));
let sum_refs: TestInt = values.iter().sum();
assert_eq!(sum_refs, TestInt::from(15u8));
let empty_vec: Vec<TestInt> = vec![];
let empty_sum: TestInt = empty_vec.iter().cloned().sum();
assert_eq!(empty_sum, TestInt::from(0u8));
}
#[test]
fn test_product() {
type TestInt = FixedUInt<u32, 2>;
let values = vec![TestInt::from(2u8), TestInt::from(3u8), TestInt::from(4u8)];
let product: TestInt = values.iter().cloned().product();
assert_eq!(product, TestInt::from(24u8));
let product_refs: TestInt = values.iter().product();
assert_eq!(product_refs, TestInt::from(24u8));
let empty_vec: Vec<TestInt> = vec![];
let empty_product: TestInt = empty_vec.iter().cloned().product();
assert_eq!(empty_product, TestInt::from(1u8));
}
#[test]
fn test_sum_large_numbers() {
type TestInt = FixedUInt<u64, 2>;
let values = vec![
TestInt::from(1000000u32),
TestInt::from(2000000u32),
TestInt::from(3000000u32),
];
let sum: TestInt = values.iter().cloned().sum();
assert_eq!(sum, TestInt::from(6000000u32));
}
#[test]
fn test_product_large_numbers() {
type TestInt = FixedUInt<u64, 2>;
let values = vec![
TestInt::from(10u8),
TestInt::from(20u8),
TestInt::from(30u8),
];
let product: TestInt = values.iter().cloned().product();
let expected = TestInt::from(10u8) * TestInt::from(20u8) * TestInt::from(30u8);
assert_eq!(product, expected); }
#[test]
fn test_sum_different_types() {
type TestInt8 = FixedUInt<u8, 4>;
type TestInt16 = FixedUInt<u16, 2>;
let values8 = vec![
TestInt8::from(10u8),
TestInt8::from(20u8),
TestInt8::from(30u8),
];
let sum8: TestInt8 = values8.iter().cloned().sum();
assert_eq!(sum8, TestInt8::from(60u8));
let values16 = vec![
TestInt16::from(100u8),
TestInt16::from(200u8),
TestInt16::from(255u8),
];
let sum16: TestInt16 = values16.iter().cloned().sum();
assert_eq!(sum16, TestInt16::from(555u16)); }
#[test]
fn test_chained_operations() {
type TestInt = FixedUInt<u32, 2>;
let values = vec![
TestInt::from(1u8),
TestInt::from(2u8),
TestInt::from(3u8),
TestInt::from(4u8),
TestInt::from(5u8),
];
let sum_evens: TestInt = values
.iter()
.filter(|&&x| x % TestInt::from(2u8) == TestInt::from(0u8))
.cloned()
.sum();
assert_eq!(sum_evens, TestInt::from(6u8));
let product_doubled: TestInt = values
.iter()
.take(3)
.map(|&x| x * TestInt::from(2u8))
.product();
assert_eq!(product_doubled, TestInt::from(48u8)); }