multiplicaiton, division, and negation

This commit is contained in:
Jon Janzen
2021-01-23 19:15:26 -07:00
parent 275d857e7a
commit ea51c5785d

View File

@@ -59,6 +59,33 @@ fn tuple_sub(lhs: PointVector, rhs: PointVector) -> PointVector {
)
}
fn tuple_neg(lhs: PointVector) -> PointVector {
(
-lhs.0,
-lhs.1,
-lhs.2,
-lhs.3
)
}
fn tuple_mult(lhs: PointVector, scalar: f32) -> PointVector {
(
lhs.0 * scalar,
lhs.1 * scalar,
lhs.2 * scalar,
lhs.3 * scalar,
)
}
fn tuple_div(lhs: PointVector, divisor: f32) -> PointVector {
(
lhs.0 / divisor,
lhs.1 / divisor,
lhs.2 / divisor,
lhs.3 / divisor,
)
}
#[cfg(test)]
mod tests {
use super::*;
@@ -153,4 +180,45 @@ mod tests {
let result = vector(-2.0, -4.0, -6.0);
assert_eq!(true, tuple_equals(result, tuple_sub(a1, a2)));
}
#[test]
fn subtract_vector_from_zero_vector() {
let a1 = vector(0.0, 0.0, 0.0);
let a2 = vector(5.0, 6.0, 7.0);
let result = vector(-5.0, -6.0, -7.0);
assert_eq!(true, tuple_equals(result, tuple_sub(a1, a2)));
}
#[test]
fn negate_tuple() {
let a = (1.0, -2.0, 3.0, -4.0);
let result = (-1.0, 2.0, -3.0, 4.0);
assert_eq!(result, tuple_neg(a));
}
#[test]
fn multiply_tuple_by_scalar() {
let a = (1.0, -2.0, 3.0, -4.0);
let result = (3.5, -7.0, 10.5, -14.0);
assert_eq!(true, tuple_equals(result, tuple_mult(a, 3.5)));
}
#[test]
fn multiply_tuple_by_fraction() {
let a = (1.0, -2.0, 3.0, -4.0);
let result = (0.5, -1.0, 1.5, -2.0);
assert_eq!(true, tuple_equals(result, tuple_mult(a, 0.5)));
}
#[test]
fn divide_tuple() {
let a = (1.0, -2.0, 3.0, -4.0);
let result = (0.5, -1.0, 1.5, -2.0);
assert_eq!(true, tuple_equals(result, tuple_div(a, 2.0)));
}
}