use mathhook_core::prelude::*;
#[test]
fn test_factor_basic() {
let x = symbol!(x);
let expr = Expression::add(vec![
Expression::mul(vec![Expression::integer(6), Expression::symbol(x.clone())]),
Expression::integer(9),
]);
let result = expr.simplify(); println!("6x + 9 factored = {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_collect_terms() {
let x = symbol!(x);
let expr = Expression::add(vec![
Expression::mul(vec![Expression::integer(2), Expression::symbol(x.clone())]),
Expression::mul(vec![Expression::integer(3), Expression::symbol(x.clone())]),
]);
let result = expr.simplify(); println!("2x + 3x collected = {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_collect_powers() {
let x = symbol!(x);
let expr = Expression::add(vec![
Expression::pow(Expression::symbol(x.clone()), Expression::integer(2)),
Expression::pow(Expression::symbol(x.clone()), Expression::integer(2)),
]);
let result = expr.simplify();
println!("x^2 + x^2 = {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_simplify_factor_out() {
let x = symbol!(x);
let expr = Expression::add(vec![
Expression::mul(vec![
Expression::integer(4),
Expression::symbol(x.clone()),
Expression::symbol(x.clone()),
]),
Expression::mul(vec![Expression::integer(6), Expression::symbol(x.clone())]),
]);
let result = expr.simplify();
println!("4x^2 + 6x factored = {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_as_content_primitive() {
let x = symbol!(x);
let expr = Expression::add(vec![
Expression::mul(vec![Expression::integer(12), Expression::symbol(x.clone())]),
Expression::integer(18),
]);
let result = expr.simplify();
println!("12x + 18 = {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_separatevars() {
let x = symbol!(x);
let y = symbol!(y);
let expr = Expression::add(vec![
Expression::mul(vec![
Expression::symbol(x.clone()),
Expression::symbol(y.clone()),
]),
Expression::symbol(x.clone()),
Expression::symbol(y.clone()),
Expression::integer(1),
]);
let result = expr.simplify();
println!("xy + x + y + 1 = {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_historic_60_percent_milestone_operation() {
let x = symbol!(x);
let expr = Expression::add(vec![
Expression::mul(vec![
Expression::integer(8),
Expression::pow(Expression::symbol(x.clone()), Expression::integer(3)),
]),
Expression::mul(vec![
Expression::integer(12),
Expression::pow(Expression::symbol(x.clone()), Expression::integer(2)),
]),
Expression::mul(vec![Expression::integer(6), Expression::symbol(x.clone())]),
Expression::integer(1),
]);
let result = expr.simplify();
println!("60% milestone polynomial: {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_advanced_factorization_mastery() {
let x = symbol!(x);
let y = symbol!(y);
let expr = Expression::add(vec![
Expression::pow(Expression::symbol(x.clone()), Expression::integer(2)),
Expression::mul(vec![
Expression::integer(2),
Expression::symbol(x.clone()),
Expression::symbol(y.clone()),
]),
Expression::pow(Expression::symbol(y.clone()), Expression::integer(2)),
]);
let result = expr.simplify();
println!("x^2 + 2xy + y^2 = {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_ultimate_algebraic_mastery() {
let x = symbol!(x);
let expr = Expression::add(vec![
Expression::pow(Expression::symbol(x.clone()), Expression::integer(4)),
Expression::mul(vec![
Expression::integer(-2),
Expression::pow(Expression::symbol(x.clone()), Expression::integer(2)),
]),
Expression::integer(1),
]);
let result = expr.simplify();
println!("x^4 - 2x^2 + 1 = {}", result);
assert!(!result.is_zero());
}