backfill Vec2::rotate tests
This commit is contained in:
@@ -144,7 +144,6 @@ impl<R: Real> Vec2<R> {
|
||||
// self.y.to_f64().atan2(self.x.to_f64()).cast()
|
||||
// }
|
||||
|
||||
// TODO test
|
||||
pub fn rotate(&self, angle: R) -> Self {
|
||||
let (sin, cos) = angle.sin_cos();
|
||||
let map_1x_0y = Vec2::new(cos, sin);
|
||||
@@ -492,3 +491,41 @@ impl<R: Real + fmt::Display> fmt::Display for Vec3<R> {
|
||||
fmt::Display::fmt(")", f)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use float_eq::assert_float_eq;
|
||||
|
||||
fn assert_vec2(got: Vec2<f32>, want: Vec2<f32>) {
|
||||
assert_float_eq!(got.x(), want.x(), abs <= 1e-6);
|
||||
assert_float_eq!(got.y(), want.y(), abs <= 1e-6);
|
||||
}
|
||||
#[test]
|
||||
fn vec2_rotate_trivial() {
|
||||
// no-op rotate
|
||||
assert_vec2(Vec2::new(1.0, 0.0).rotate(0.0), Vec2::new(1.0, 0.0));
|
||||
assert_vec2(Vec2::new(1.0, 1.0).rotate(f32::two_pi()), Vec2::new(1.0, 1.0));
|
||||
assert_vec2(Vec2::new(-2.0, 3.0).rotate(-f32::two_pi()), Vec2::new(-2.0, 3.0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn vec2_rotate_quarter_turns() {
|
||||
assert_vec2(Vec2::new(1.0, 0.0).rotate(f32::pi()), Vec2::new(-1.0, 0.0));
|
||||
assert_vec2(Vec2::new(1.0, -1.0).rotate(f32::pi()), Vec2::new(-1.0, 1.0));
|
||||
|
||||
assert_vec2(Vec2::new(1.0, 0.0).rotate(0.5*f32::pi()), Vec2::new(0.0, 1.0));
|
||||
assert_vec2(Vec2::new(1.0, -1.0).rotate(0.5*f32::pi()), Vec2::new(1.0, 1.0));
|
||||
|
||||
assert_vec2(Vec2::new(-1.0, 0.0).rotate(-0.5*f32::pi()), Vec2::new(0.0, 1.0));
|
||||
assert_vec2(Vec2::new(-1.0, -1.0).rotate(-0.5*f32::pi()), Vec2::new(-1.0, 1.0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn vec2_rotate_zero() {
|
||||
assert_vec2(Vec2::new(0.0, 0.0).rotate(1.0), Vec2::new(0.0, 0.0));
|
||||
assert_vec2(Vec2::new(0.0, 0.0).rotate(1e9), Vec2::new(0.0, 0.0));
|
||||
}
|
||||
|
||||
// TODO: lots more Vec, Vec2 tests need backfilling
|
||||
}
|
||||
|
Reference in New Issue
Block a user