mod common;
use common::*;
use serde_json::Value;
#[test]
fn single_variable_integrals() {
let one = &num(1);
let two = &num(2);
let three = &num(3);
let four = &num(4);
let five = &num(5);
let _six = &num(6);
let seven = &num(7);
let eight = &num(8);
let nine = &num(9);
let p1: Problem = (
int(&sum3(&pow(X, four), &neg(&pow(X, three)), &pow(X, two)), X),
sum3(
&frac(&pow(X, five), five),
&neg(&frac(&pow(X, four), four)),
&frac(&pow(X, three), three),
),
);
let p2: Problem = (
int(
&sum4(
&prod(five, &pow(T, eight)),
&neg(&prod(two, &pow(T, four))),
T,
three,
),
T,
),
sum4(
&frac(&prod(five, &pow(T, nine)), nine),
&neg(&frac(&prod(two, &pow(T, five)), five)),
&frac(&pow(T, two), two),
&prod(three, T),
),
);
let _p3: Problem = (
int(
&sum(
&prod(seven, &pow(X, &frac(three, two))),
&prod(two, &pow(X, &frac(one, two))),
),
X,
),
sum(
&frac(&prod(&num(14), &pow(X, &frac(five, two))), five),
&frac(&prod(four, &pow(X, &frac(three, two))), three),
),
);
let p4: Problem = (
int(
&sum(
&prod(three, &pow(X, &neg(two))),
&neg(&prod(four, &pow(X, &neg(three)))),
),
X,
),
sum(
&neg(&prod(three, &pow(X, &neg(one)))),
&prod(two, &pow(X, &neg(two))),
),
);
let p5: Problem = (int(&frac(three, X), X), prod(three, &ln(&abs(X))));
let p9: Problem = (
int(&sum(&prod(two, &sin(X)), &prod(three, &cos(X))), X),
sum(&neg(&prod(two, &cos(X))), &prod(three, &sin(X))),
);
let p11: Problem = (
int(&frac(four, &sum(one, &pow(T, two))), T),
prod(four, &arctan(T)),
);
add_test("problem 1", p1, 100);
add_test("problem 2", p2, 100);
add_test("problem 5", p5, 100);
add_test("problem 4", p4, 100);
add_test("problem 9", p9, 100);
add_test("problem 11", p11, 100);
report_results();
}
#[test]
fn loaded_simplification_tests() {
let data_str = include_str!("test_data.json");
let data_obj = serde_json::from_str::<Value>(data_str).expect("Failed to parse test data");
let problems = data_obj
.as_object()
.unwrap()
.get_key_value("problems")
.unwrap()
.1
.as_array()
.unwrap()
.iter()
.map::<Problem, _>(|v| {
let obj = v.as_object().unwrap();
(
obj.get_key_value("input").unwrap().1.to_string(),
obj.get_key_value("expected").unwrap().1.to_string(),
)
});
let mut i = 1;
for problem in problems {
add_test(&format!("Loaded Test {i}"), problem, 100);
i += 1;
}
report_results()
}