use mathhook_core::calculus::integrals::Integration;
use mathhook_core::core::Expression;
use mathhook_core::symbol;
#[test]
fn test_sin_basic() {
let x = symbol!(x);
let integrand = Expression::function("sin", vec![Expression::symbol(x.clone())]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_cos_basic() {
let x = symbol!(x);
let integrand = Expression::function("cos", vec![Expression::symbol(x.clone())]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sin_cubed() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(3),
);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sin_fifth() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(5),
);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_sin_cubed_cos_squared() {
let x = symbol!(x);
let sin_cubed = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(3),
);
let cos_squared = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let integrand = Expression::mul(vec![sin_cubed, cos_squared]);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_sin_cos_fourth() {
let x = symbol!(x);
let sin_x = Expression::function("sin", vec![Expression::symbol(x.clone())]);
let cos_fourth = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(4),
);
let integrand = Expression::mul(vec![sin_x, cos_fourth]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_cos_cubed() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(3),
);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_cos_fifth() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(5),
);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_sin_squared_cos_cubed() {
let x = symbol!(x);
let sin_squared = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let cos_cubed = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(3),
);
let integrand = Expression::mul(vec![sin_squared, cos_cubed]);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_sin_fourth_cos() {
let x = symbol!(x);
let sin_fourth = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(4),
);
let cos_x = Expression::function("cos", vec![Expression::symbol(x.clone())]);
let integrand = Expression::mul(vec![sin_fourth, cos_x]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sin_squared() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_cos_squared() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sin_squared_cos_squared() {
let x = symbol!(x);
let sin_sq = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let cos_sq = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let integrand = Expression::mul(vec![sin_sq, cos_sq]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sin_fourth() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(4),
);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_cos_fourth() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(4),
);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_tan_squared() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("tan", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sec_squared() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("sec", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_tan_cubed_sec_squared() {
let x = symbol!(x);
let tan_cubed = Expression::pow(
Expression::function("tan", vec![Expression::symbol(x.clone())]),
Expression::integer(3),
);
let sec_squared = Expression::pow(
Expression::function("sec", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let integrand = Expression::mul(vec![tan_cubed, sec_squared]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_tan_sec() {
let x = symbol!(x);
let tan_x = Expression::function("tan", vec![Expression::symbol(x.clone())]);
let sec_x = Expression::function("sec", vec![Expression::symbol(x.clone())]);
let integrand = Expression::mul(vec![tan_x, sec_x]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_tan_fourth_sec_squared() {
let x = symbol!(x);
let tan_fourth = Expression::pow(
Expression::function("tan", vec![Expression::symbol(x.clone())]),
Expression::integer(4),
);
let sec_squared = Expression::pow(
Expression::function("sec", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let integrand = Expression::mul(vec![tan_fourth, sec_squared]);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_cot_squared() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("cot", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_csc_squared() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("csc", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_cot_cubed_csc_squared() {
let x = symbol!(x);
let cot_cubed = Expression::pow(
Expression::function("cot", vec![Expression::symbol(x.clone())]),
Expression::integer(3),
);
let csc_squared = Expression::pow(
Expression::function("csc", vec![Expression::symbol(x.clone())]),
Expression::integer(2),
);
let integrand = Expression::mul(vec![cot_cubed, csc_squared]);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_cot_csc() {
let x = symbol!(x);
let cot_x = Expression::function("cot", vec![Expression::symbol(x.clone())]);
let csc_x = Expression::function("csc", vec![Expression::symbol(x.clone())]);
let integrand = Expression::mul(vec![cot_x, csc_x]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_tan_basic() {
let x = symbol!(x);
let integrand = Expression::function("tan", vec![Expression::symbol(x.clone())]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_cot_basic() {
let x = symbol!(x);
let integrand = Expression::function("cot", vec![Expression::symbol(x.clone())]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sec_basic() {
let x = symbol!(x);
let integrand = Expression::function("sec", vec![Expression::symbol(x.clone())]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_csc_basic() {
let x = symbol!(x);
let integrand = Expression::function("csc", vec![Expression::symbol(x.clone())]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sin_cos_product() {
let x = symbol!(x);
let sin_x = Expression::function("sin", vec![Expression::symbol(x.clone())]);
let cos_x = Expression::function("cos", vec![Expression::symbol(x.clone())]);
let integrand = Expression::mul(vec![sin_x, cos_x]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_sin_sixth() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(6),
);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_cos_sixth() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::integer(6),
);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_negative_powers_are_not_trig_patterns() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(-1),
);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_mixed_trig_functions_not_supported() {
let x = symbol!(x);
let sin_x = Expression::function("sin", vec![Expression::symbol(x.clone())]);
let tan_x = Expression::function("tan", vec![Expression::symbol(x.clone())]);
let integrand = Expression::mul(vec![sin_x, tan_x]);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_zero_power_edge_case() {
let x = symbol!(x);
let integrand = Expression::pow(
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::integer(0),
);
let result = integrand.integrate(x, 0);
assert!(result == result);
}
#[test]
fn test_sin_cos_different_freq() {
let _x = symbol!(x);
}
#[test]
fn test_sin_sin_same_freq() {
let x = symbol!(x);
let integrand = Expression::mul(vec![
Expression::function("sin", vec![Expression::symbol(x.clone())]),
Expression::function("sin", vec![Expression::symbol(x.clone())]),
]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}
#[test]
fn test_cos_cos_same_freq() {
let x = symbol!(x);
let integrand = Expression::mul(vec![
Expression::function("cos", vec![Expression::symbol(x.clone())]),
Expression::function("cos", vec![Expression::symbol(x.clone())]),
]);
let result = integrand.integrate(x, 0);
assert!(!matches!(result, Expression::Calculus(_)));
}