use mathhook::prelude::*;
#[test]
fn test_expression_api() {
let x = symbol!(x);
let expr1 = Expression::symbol(x.clone());
let expr2 = Expression::integer(5);
let expr3 = Expression::add(vec![expr1, expr2]);
let result = expr3.simplify();
println!("API test: {}", result);
assert!(!result.is_zero());
}
#[test]
fn test_operator_overloading() {
let x = symbol!(x);
let y = symbol!(y);
let sum = Expression::symbol(x.clone()) + Expression::symbol(y.clone());
let product = Expression::symbol(x.clone()) * Expression::integer(2);
let power = Expression::pow(Expression::symbol(x.clone()), Expression::integer(2));
println!("Sum: {}, Product: {}, Power: {}", sum, product, power);
assert!(!sum.is_zero());
assert!(!product.is_zero());
assert!(!power.is_zero());
}
#[test]
fn test_convenience_methods() {
let x = symbol!(x);
let zero = Expression::integer(0);
let one = Expression::integer(1);
let symbol = Expression::symbol(x.clone());
assert!(zero.is_zero());
assert!(one.is_one());
assert!(!symbol.is_zero());
assert!(!symbol.is_one());
}
#[test]
fn test_api_consistency() {
let x = symbol!(x);
let method1 = Expression::add(vec![Expression::symbol(x.clone()), Expression::integer(1)]);
let method2 = Expression::symbol(x.clone()) + Expression::integer(1);
println!("Method 1: {}, Method 2: {}", method1, method2);
assert_eq!(method1, method2);
}