tuple addition and subtraction
This commit is contained in:
@@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user