rust/integral-geometry/src/lib.rs
changeset 14077 5ade484f3351
parent 14076 e5904ead4864
child 14078 bf40b5f938b0
equal deleted inserted replaced
14076:e5904ead4864 14077:5ade484f3351
   227 
   227 
   228     #[inline]
   228     #[inline]
   229     pub fn zero() -> Self {
   229     pub fn zero() -> Self {
   230         Self::new(Point::zero(), Point::zero())
   230         Self::new(Point::zero(), Point::zero())
   231     }
   231     }
       
   232 
       
   233     #[inline]
       
   234     pub fn center(&self) -> Point {
       
   235         (self.start + self.end) / Point::new(2, 2) // point div point, really?
       
   236     }
   232 }
   237 }
   233 
   238 
   234 impl IntoIterator for Line {
   239 impl IntoIterator for Line {
   235     type Item = Point;
   240     type Item = Point;
   236     type IntoIter = LinePoints;
   241     type IntoIter = LinePoints;
   375         coords.iter().map(|(x, y)| Point::new(*x, *y)).collect()
   380         coords.iter().map(|(x, y)| Point::new(*x, *y)).collect()
   376     }
   381     }
   377 
   382 
   378     #[test]
   383     #[test]
   379     fn line_basic() {
   384     fn line_basic() {
   380         let line = Line::new(Point::new(0, 0), Point::new(3, 3)).into_iter();
   385         let line: Vec<Point> = Line::new(Point::new(0, 0), Point::new(3, 3))
   381         let v = get_points(&[(0, 0), (1, 1), (2, 2), (3, 3), (123, 456)]);
   386             .into_iter()
   382 
   387             .collect();
   383         for (&a, b) in v.iter().zip(line) {
   388         let v = get_points(&[(0, 0), (1, 1), (2, 2), (3, 3)]);
   384             assert_eq!(a, b);
   389 
   385         }
   390         assert_eq!(line, v);
   386     }
   391     }
   387 
   392 
   388     #[test]
   393     #[test]
   389     fn line_skewed() {
   394     fn line_skewed() {
   390         let line = Line::new(Point::new(0, 0), Point::new(5, -7)).into_iter();
   395         let line: Vec<Point> = Line::new(Point::new(0, 0), Point::new(5, -7))
       
   396             .into_iter()
       
   397             .collect();
   391         let v = get_points(&[
   398         let v = get_points(&[
   392             (0, 0),
   399             (0, 0),
   393             (1, -1),
   400             (1, -1),
   394             (2, -2),
   401             (2, -2),
   395             (2, -3),
   402             (2, -3),
   397             (4, -5),
   404             (4, -5),
   398             (4, -6),
   405             (4, -6),
   399             (5, -7),
   406             (5, -7),
   400         ]);
   407         ]);
   401 
   408 
   402         for (&a, b) in v.iter().zip(line) {
   409         assert_eq!(line, v);
   403             assert_eq!(a, b);
       
   404         }
       
   405     }
   410     }
   406 
   411 
   407     #[test]
   412     #[test]
   408     fn equidistant_full() {
   413     fn equidistant_full() {
   409         let n = EquidistantPoints::new(Point::new(1, 3));
   414         let n: Vec<Point> = EquidistantPoints::new(Point::new(1, 3)).collect();
   410         let v = get_points(&[
   415         let v = get_points(&[
   411             (-1, -3),
   416             (-1, -3),
   412             (1, -3),
   417             (1, -3),
   413             (-1, 3),
   418             (-1, 3),
   414             (1, 3),
   419             (1, 3),
   415             (-3, -1),
   420             (-3, -1),
   416             (3, -1),
   421             (3, -1),
   417             (-3, 1),
   422             (-3, 1),
   418             (3, 1),
   423             (3, 1),
   419             (123, 456),
       
   420         ]);
   424         ]);
   421 
   425 
   422         for (&a, b) in v.iter().zip(n) {
   426         assert_eq!(n, v);
   423             assert_eq!(a, b);
       
   424         }
       
   425     }
   427     }
   426 
   428 
   427     #[test]
   429     #[test]
   428     fn equidistant_half() {
   430     fn equidistant_half() {
   429         let n = EquidistantPoints::new(Point::new(2, 2));
   431         let n: Vec<Point> = EquidistantPoints::new(Point::new(2, 2)).collect();
   430         let v = get_points(&[(-2, -2), (2, -2), (-2, 2), (2, 2), (123, 456)]);
   432         let v = get_points(&[(-2, -2), (2, -2), (-2, 2), (2, 2)]);
   431 
   433 
   432         for (&a, b) in v.iter().zip(n) {
   434         assert_eq!(n, v);
   433             assert_eq!(a, b);
   435     }
   434         }
   436 
   435     }
   437     #[test]
   436 }
   438     fn line() {
       
   439         let l = Line::new(Point::new(1, 1), Point::new(5, 6));
       
   440 
       
   441         assert_eq!(l.center(), Point::new(3, 3));
       
   442     }
       
   443 }