#[cfg(test)]
mod tests {
use super::super::curve_2d::{Curve2D, Domain};
use plottery_lib::V2;
#[test]
fn test_domain_default() {
let domain = Domain::default();
assert_eq!(domain.x_start, 0.0);
assert_eq!(domain.x_end, 1.0);
assert_eq!(domain.y_start, 0.0);
assert_eq!(domain.y_end, 1.0);
}
#[test]
fn test_domain_new() {
let domain = Domain::new(0.0, 10.0, 0.0, 100.0);
assert_eq!(domain.x_start, 0.0);
assert_eq!(domain.x_end, 10.0);
assert_eq!(domain.y_start, 0.0);
assert_eq!(domain.y_end, 100.0);
}
#[test]
fn test_curve2d_default() {
let curve = Curve2D::default();
assert_eq!(curve.sample(0.0), 0.0);
assert_eq!(curve.sample(1.0), 1.0);
assert_eq!(curve.len(), 2);
}
#[test]
fn test_sample_with_range_mapping() {
let curve = Curve2D::new(Domain::new(0.0, 10.0, 0.0, 100.0));
assert_eq!(curve.sample(5.0), 50.0);
assert_eq!(curve.sample(0.0), 0.0);
assert_eq!(curve.sample(10.0), 100.0);
}
#[test]
fn test_sample_with_custom_ranges() {
let mut curve = Curve2D::new(Domain::new(-1.0, 1.0, 10.0, 20.0));
curve.update_endpoint_norm(true, 0.5);
curve.update_endpoint_norm(false, 0.5);
assert_eq!(curve.sample(-1.0), 15.0);
assert_eq!(curve.sample(1.0), 15.0);
assert_eq!(curve.sample(0.0), 15.0);
}
#[test]
fn test_add_point_in_normalized_space() {
let mut curve = Curve2D::new(Domain::new(0.0, 10.0, 0.0, 100.0));
curve.add_point_norm(V2::new(0.5, 0.8)).unwrap();
assert_eq!(curve.len(), 3);
let y = curve.sample(5.0);
assert_eq!(y, 80.0); }
#[test]
fn test_iter_points_normalized() {
let mut curve = Curve2D::new(Domain::new(0.0, 10.0, 0.0, 100.0));
curve.add_point_norm(V2::new(0.5, 0.5)).unwrap();
let points: Vec<_> = curve.iter_points_norm().collect();
assert_eq!(points.len(), 3);
assert_eq!(points[0], V2::new(0.0, 0.0));
assert_eq!(points[1], V2::new(0.5, 0.5));
assert_eq!(points[2], V2::new(1.0, 1.0));
}
#[test]
fn test_curve_mut() {
let mut curve = Curve2D::new(Domain::new(0.0, 10.0, 0.0, 100.0));
curve.update_endpoint_norm(true, 0.5);
curve.update_endpoint_norm(false, 0.5);
assert_eq!(curve.sample(0.0), 50.0);
assert_eq!(curve.sample(10.0), 50.0);
}
}