tuple addition and subtraction

This commit is contained in:
Jon Janzen
2021-01-23 18:46:21 -07:00
parent 2e481efd7a
commit 275d857e7a

View File

@@ -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)));
}
}