prime_factorization 1.0.5

Prime factorization up to 128 bit integers.
Documentation
//! Integration tests.
//!
use prime_factorization::Factorization;

#[test]
fn factorization_small_composite() {
    let num: u32 = 1027;

    let factor_repr = Factorization::run(num);

    assert_eq!(factor_repr.factors, vec![13, 79]);
    assert_eq!(factor_repr.is_prime, false);

    assert_eq!(factor_repr.num, num);
}

#[test]
fn factorization_u32_max() {
    let num = u32::MAX;
    let factor_repr = Factorization::run(num);

    assert_eq!(factor_repr.factors, vec![3, 5, 17, 257, 65_537]);
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_mid_composite() {
    let num: u64 = 6_560_999_999_999_999;

    let factor_repr = Factorization::run(num);

    assert_eq!(factor_repr.factors, vec![8999, 9001, 81_000_001]);
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_mid_composite_2() {
    let num: u64 = 5_298_573_603_985_982_111;

    let factor_repr = Factorization::run(num);

    assert_eq!(factor_repr.factors, vec![11, 3_057_227, 157_557_325_463]);
    assert_eq!(factor_repr.is_prime, false);

    assert_eq!(factor_repr.num, num);
}

#[test]
fn factorization_mid_composite_3() {
    let num: u64 = 34_960_871_208_453_527;

    let factor_repr = Factorization::run(num);

    assert_eq!(factor_repr.factors, vec![13_669, 13_679, 186_978_277]);
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_u64_max() {
    let num = u64::MAX;
    let factor_repr = Factorization::run(num);

    assert_eq!(
        factor_repr.factors,
        vec![3, 5, 17, 257, 641, 65_537, 6_700_417]
    );
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_perfect_number() {
    let other_part = 2u128.pow(61) - 1;
    let num: u128 = 2u128.pow(60) * other_part;

    let factor_repr = Factorization::run(num);
    let mut correct_sol = vec![2; 60];
    correct_sol.append(&mut vec![other_part]);

    assert_eq!(factor_repr.factors, correct_sol);
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_large_composite() {
    let num: u128 = 15_128_635_609_904_480_825_735_589_151_693_951;

    let factor_repr = Factorization::run(num);

    assert_eq!(
        factor_repr.factors,
        vec![8999, 8999, 9001, 9001, 2_305_843_009_213_693_951]
    );
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_large_composite_2() {
    let num: u128 = u128::MAX - 4;

    let factor_repr = Factorization::run(num);

    assert_eq!(
        factor_repr.factors,
        vec![169_909, 2_002_733_033_099_709_041_094_789_607_565_039]
    );
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_u128_max() {
    let num = u128::MAX;
    let factor_repr = Factorization::run(num);

    assert_eq!(
        factor_repr.factors,
        vec![
            3,
            5,
            17,
            257,
            641,
            65_537,
            274_177,
            6_700_417,
            67_280_421_310_721
        ]
    );
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_multiple_factors() {
    let num: u128 = 1_742_252_654_625_863_814_028_009_129;

    let factor_repr = Factorization::run(num);

    assert_eq!(
        factor_repr.factors,
        vec![11, 13, 7963, 13_831, 13_841, 19_991, 19_993, 19_997]
    );
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_small_prime() {
    let prime: u32 = 10_007;

    let factor_repr = Factorization::run(prime);

    assert_eq!(factor_repr.factors, vec![prime]);
    assert_eq!(factor_repr.is_prime, true);
}

#[test]
fn factorization_large_prime() {
    let prime: u128 = 837_598_237_598_275_982_352_383;

    let factor_repr = Factorization::run(prime);

    assert_eq!(factor_repr.factors, vec![prime]);
    assert_eq!(factor_repr.is_prime, true);
}

#[test]
fn factorization_product_of_prime_powers() {
    let num: u128 = 1_043_303_125_536_110_280_882_830_068_463_968_373;

    let factor_repr = Factorization::run(num);

    assert_eq!(
        factor_repr.factors,
        vec![9941, 9941, 9941, 9941, 10_133, 10_133, 10_133, 10_133, 10_133]
    );
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_semiprime() {
    let num: u128 = 5_316_911_983_139_663_122_320_058_796_740_706_329;

    let factor_repr = Factorization::run(num);

    assert_eq!(
        factor_repr.factors,
        vec![72_057_594_037_927_931, 73_786_976_294_838_206_459]
    );
    assert_eq!(factor_repr.is_prime, false);
}

#[test]
fn factorization_for_one_and_zero() {
    let factor_repr = Factorization::run(0u32);

    assert_eq!(factor_repr.is_prime, false);
    assert_eq!(factor_repr.factors, vec![]);

    let factor_repr = Factorization::run(1u32);

    assert_eq!(factor_repr.is_prime, false);
    assert_eq!(factor_repr.factors, vec![]);
}

#[test]
fn factorization_readme_example() {
    let num: u128 = 3_746_238_285_234_848_709_827;

    let factor_repr = Factorization::run(num);

    assert_eq!(factor_repr.factors, vec![103_979, 36_028_797_018_963_913]);
}

#[test]
fn factorization_readme_other_example() {
    let num: u128 = 332_306_998_946_228_968_225_951_765_070_086_139;

    let factor_repr = Factorization::run(num);

    assert_eq!(factor_repr.is_prime, true);
    assert_eq!(factor_repr.factors, vec![num]);
}