multiplicaiton, division, and negation
This commit is contained in:
@@ -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)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user