From 275d857e7ad621fa06b613e1e84e78e2f5efa658 Mon Sep 17 00:00:00 2001 From: Jon Janzen Date: Sat, 23 Jan 2021 18:46:21 -0700 Subject: [PATCH] tuple addition and subtraction --- tuples/src/lib.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tuples/src/lib.rs b/tuples/src/lib.rs index f330b89..29985ea 100644 --- a/tuples/src/lib.rs +++ b/tuples/src/lib.rs @@ -41,6 +41,24 @@ fn tuple_equals(lhs: PointVector, rhs: PointVector) -> bool { && relative_eq!(lhs.3, rhs.3) } +fn tuple_add(lhs: PointVector, rhs: PointVector) -> PointVector { + ( + lhs.0 + rhs.0, + lhs.1 + rhs.1, + lhs.2 + rhs.2, + lhs.3 + rhs.3 + ) +} + +fn tuple_sub(lhs: PointVector, rhs: PointVector) -> PointVector { + ( + lhs.0 - rhs.0, + lhs.1 - rhs.1, + lhs.2 - rhs.2, + lhs.3 - rhs.3 + ) +} + #[cfg(test)] mod tests { use super::*; @@ -99,4 +117,40 @@ mod tests { let rhs = vector(1.0, 2.0, 3.0); assert_eq!(false, tuple_equals(lhs, rhs)); } + + #[test] + fn add_two_tuples() { + let a1 = point(3.0, -2.0, 5.0); + let a2 = vector(-2.0, 3.0, 1.0); + + let result = point(1.0, 1.0, 6.0); + assert_eq!(true, tuple_equals(result, tuple_add(a1, a2))); + } + + #[test] + fn subtract_two_points() { + let a1 = point(3.0, 2.0, 1.0); + let a2 = point(5.0, 6.0, 7.0); + + let result = vector(-2.0, -4.0, -6.0); + assert_eq!(true, tuple_equals(result, tuple_sub(a1, a2))); + } + + #[test] + fn subract_vector_from_point() { + let a1 = point(3.0, 2.0, 1.0); + let a2 = vector(5.0, 6.0, 7.0); + + let result = point(-2.0, -4.0, -6.0); + assert_eq!(true, tuple_equals(result, tuple_sub(a1, a2))); + } + + #[test] + fn subract_vector_from_vector() { + let a1 = vector(3.0, 2.0, 1.0); + let a2 = vector(5.0, 6.0, 7.0); + + let result = vector(-2.0, -4.0, -6.0); + assert_eq!(true, tuple_equals(result, tuple_sub(a1, a2))); + } }