thanatos 0.1.0

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

mod test_rectangle {
  use super::*;

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

    let r = Rectangle::new(3., 2.);
    let bb = r.bounding_box();
    assert_eq!(bb.min, Point::new(0., 0., 0.));
    assert_eq!(bb.max, Widths::new(3., 2., 0.));
  }

  #[test]
  fn test_inside_rectangle() {
    let r = Rectangle::new(1., 1.);
    let v = Point::new(0.5, 0.5, 0.);
    assert!(r.sdf(&v) < 0.);

    let r = Rectangle::new(2., 3.);
    let v = Point::new(0.5, 0.5, 0.);
    assert!(r.sdf(&v) < 0.);
  }

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

    let r = Rectangle::new(2., 3.);
    let v = Point::new(2., 0.5, 0.);
    assert_eq!(r.sdf(&v), 0.);
  }

  #[test]
  fn test_outside_rectangle() {
    let r = Rectangle::new(1., 1.);
    let v = Point::new(1.5, 0.5, 0.);
    assert!(r.sdf(&v) > 0.);

    let r = Rectangle::new(2., 3.);
    let v = Point::new(2.5, 0.5, 0.);
    assert!(r.sdf(&v) > 0.);
  }
}