tuples: move tests from doctest to unit.
This commit is contained in:
parent
1d5e5a164b
commit
4352c03d20
@ -3,27 +3,11 @@ use std::ops::{Add, Div, Mul, Neg, Sub};
|
||||
use crate::{Float, EPSILON};
|
||||
|
||||
/// Short hand for creating a Tuple that represents a point, w=1.
|
||||
///
|
||||
/// # Examples
|
||||
/// ```
|
||||
/// use rtchallenge::tuples::{point, Tuple};
|
||||
///
|
||||
/// assert_eq!(point(1., 2., 3.), Tuple::point(1., 2., 3.));
|
||||
/// assert_eq!(point(1., 2., 3.), Tuple::new(1., 2., 3., 1.));
|
||||
/// ```
|
||||
pub fn point(x: Float, y: Float, z: Float) -> Tuple {
|
||||
Tuple::point(x, y, z)
|
||||
}
|
||||
|
||||
/// Short hand for creating a Tuple that represents a vector, w=0.
|
||||
///
|
||||
/// # Examples
|
||||
/// ```
|
||||
/// use rtchallenge::tuples::{vector, Tuple};
|
||||
///
|
||||
/// assert_eq!(vector(1., 2., 3.), Tuple::vector(1., 2., 3.));
|
||||
/// assert_eq!(vector(1., 2., 3.), Tuple::new(1., 2., 3., 0.));
|
||||
/// ```
|
||||
pub fn vector(x: Float, y: Float, z: Float) -> Tuple {
|
||||
Tuple::vector(x, y, z)
|
||||
}
|
||||
@ -73,26 +57,6 @@ impl Tuple {
|
||||
}
|
||||
|
||||
/// Reflects vector v across normal n.
|
||||
///
|
||||
/// # Examples
|
||||
/// ```
|
||||
/// use rtchallenge::{
|
||||
/// tuples::{reflect, Tuple},
|
||||
/// Float,
|
||||
/// };
|
||||
///
|
||||
/// // Reflecting a vector approaching at 45°
|
||||
/// let v = Tuple::vector(1., -1., 0.);
|
||||
/// let n = Tuple::vector(0., 1., 0.);
|
||||
/// let r = reflect(v, n);
|
||||
/// assert_eq!(r, Tuple::vector(1., 1., 0.));
|
||||
///
|
||||
/// // Reflecting off a slanted surface.
|
||||
/// let v = Tuple::vector(0., -1., 0.);
|
||||
/// let n = Tuple::vector((2. as Float).sqrt() / 2., (2. as Float).sqrt() / 2., 0.);
|
||||
/// let r = reflect(v, n);
|
||||
/// assert_eq!(r, Tuple::vector(1., 0., 0.));
|
||||
/// ```
|
||||
pub fn reflect(v: Tuple, n: Tuple) -> Tuple {
|
||||
v - n * 2. * dot(v, n)
|
||||
}
|
||||
@ -297,7 +261,7 @@ impl Sub for Color {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::{cross, dot, Color, Float, Tuple, EPSILON};
|
||||
use super::{cross, dot, reflect, Color, Float, Tuple, EPSILON};
|
||||
#[test]
|
||||
fn is_point() {
|
||||
// A tuple with w = 1 is a point
|
||||
@ -456,4 +420,20 @@ mod tests {
|
||||
let c2 = Color::new(0.9, 1., 0.1);
|
||||
assert_eq!(c1 * c2, Color::new(1.0 * 0.9, 0.2 * 1., 0.4 * 0.1));
|
||||
}
|
||||
#[test]
|
||||
fn reflect_approaching_at_45() {
|
||||
// Reflecting a vector approaching at 45°
|
||||
let v = Tuple::vector(1., -1., 0.);
|
||||
let n = Tuple::vector(0., 1., 0.);
|
||||
let r = reflect(v, n);
|
||||
assert_eq!(r, Tuple::vector(1., 1., 0.));
|
||||
}
|
||||
#[test]
|
||||
fn reflect_slanted_surface() {
|
||||
// Reflecting off a slanted surface.
|
||||
let v = Tuple::vector(0., -1., 0.);
|
||||
let n = Tuple::vector((2. as Float).sqrt() / 2., (2. as Float).sqrt() / 2., 0.);
|
||||
let r = reflect(v, n);
|
||||
assert_eq!(r, Tuple::vector(1., 0., 0.));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user