thanatos 0.1.0

CSG geometries in rust
Documentation
use thanatos::geometry::{Circle, Point, Widths};
use thanatos::geometry::GeometricPrimitive;

mod test_circle {
  use super::*;

  #[test]
  fn test_bounding_box() {
    let c = Circle::new(1.);
    let bb = c.bounding_box();
    assert_eq!(bb.min, Point::new(-1., -1., 0.));
    assert_eq!(bb.max, Widths::new(1., 1., 0.));

    let c = Circle::new(5.);
    let bb = c.bounding_box();
    assert_eq!(bb.min, Point::new(-5., -5., 0.));
    assert_eq!(bb.max, Widths::new(5., 5., 0.));
  }
  
  #[test]
  fn test_inside_circle() {
    let c = Circle::new(1.);
    let v = Point::new(0., 0., 0.);
    assert!(c.sdf(&v) < 0.);

    let c = Circle::new(5.);
    let v = Point::new(0., 0., 0.);
    assert!(c.sdf(&v) < 0.);
  }

  #[test]
  fn test_on_boundary() {
    let c = Circle::new(1.);
    let v = Point::new(1., 0., 0.);
    assert_eq!(c.sdf(&v), 0.);

    let c = Circle::new(5.);
    println!("c = {:?}", c);
    let v = Point::new(5., 0., 0.);
    assert_eq!(c.sdf(&v), 0.);
  }

  #[test]
  fn test_outside_circle() {
    let c = Circle::new(1.);
    let v = Point::new(1., 1., 0.);
    assert!(c.sdf(&v) > 0.);

    let c = Circle::new(5.);
    let v = Point::new(5., 5., 0.);
    assert!(c.sdf(&v) > 0.);
  }
}