changeset 14077 | 5ade484f3351 |
parent 14076 | e5904ead4864 |
child 14078 | bf40b5f938b0 |
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 } |