use cgar::geometry::Point2;
use cgar::geometry::Point3;
use cgar::geometry::spatial_element::SpatialElement;
use cgar::geometry::util::EPS;
use cgar::kernel::orient;
use cgar::numeric::cgar_f64::CgarF64;
use cgar::operations::Abs;
#[test]
fn ccw_test() {
let a = Point2::<CgarF64>::from_vals([0.0, 0.0]);
let b = Point2::from_vals([1.0, 0.0]);
let c = Point2::from_vals([0.0, 1.0]);
assert!(orient(&[a, b, c]) > 0.0.into()); }
#[test]
fn orientation_3d_positive_volume() {
let a = Point3::<CgarF64>::from_vals([0.0, 0.0, 0.0]);
let b = Point3::from_vals([1.0, 0.0, 0.0]);
let c = Point3::from_vals([0.0, 1.0, 0.0]);
let d = Point3::from_vals([0.0, 0.0, 1.0]);
let vol = orient(&[a, b, c, d]);
assert!(vol > 0.0.into());
}
#[test]
fn orientation_3d_negative_volume() {
let a = Point3::<CgarF64>::from_vals([0.0, 0.0, 0.0]);
let b = Point3::from_vals([1.0, 0.0, 0.0]);
let c = Point3::from_vals([0.0, 1.0, 0.0]);
let d = Point3::from_vals([0.0, 0.0, -1.0]);
let vol = orient(&[a, b, c, d]);
assert!(vol < 0.0.into());
}
#[test]
fn orientation_3d_coplanar() {
let a = Point3::<CgarF64>::from_vals([0.0, 0.0, 0.0]);
let b = Point3::from_vals([1.0, 0.0, 0.0]);
let c = Point3::from_vals([0.0, 1.0, 0.0]);
let d = Point3::from_vals([1.0, 1.0, 0.0]);
let vol = orient(&[a, b, c, d]);
assert!(vol.abs() < EPS.into()); }