use rhai::{packages::Package, Engine, Map};
use rhai_sci::SciPackage;
#[test]
fn projectile_motion_example_produces_expected_result() {
let mut engine = Engine::new();
engine.register_global_module(SciPackage::new().as_shared_module());
let result: Map = engine
.eval_file("examples/projectile_motion.rhai".into())
.expect("script evaluation should succeed");
let max_height = result["max_height"].clone().cast::<f64>();
let time_of_flight = result["time_of_flight"].clone().cast::<f64>();
let range = result["range"].clone().cast::<f64>();
let expected_max_height =
(25.0_f64.powi(2) * (45_f64.to_radians().sin().powi(2))) / (2.0 * 9.81);
let expected_time_of_flight = 2.0 * 25.0 * 45_f64.to_radians().sin() / 9.81;
let expected_range = (25.0_f64.powi(2) * (2.0 * 45_f64.to_radians()).sin()) / 9.81;
assert!((max_height - expected_max_height).abs() < 1e-2);
assert!((time_of_flight - expected_time_of_flight).abs() < 1e-6);
assert!((range - expected_range).abs() < 1e-6);
}