mirror of
https://github.com/thilo-behnke/wasm-pong.git
synced 2026-05-17 09:26:32 +00:00
133 lines
3.8 KiB
Rust
133 lines
3.8 KiB
Rust
use pong::geom::geom::Vector;
|
|
use rstest::rstest;
|
|
use std::f64::consts::FRAC_PI_2;
|
|
use std::f64::consts::FRAC_PI_4;
|
|
use std::f64::consts::PI;
|
|
|
|
#[rstest]
|
|
#[case(1., 0., 1.)]
|
|
#[case(0., 1., 1.)]
|
|
#[case(3., 4., 5.)]
|
|
pub fn should_get_correct_length(#[case] x: f64, #[case] y: f64, #[case] expected: f64) {
|
|
let vector = Vector { x, y };
|
|
let len = vector.len();
|
|
assert_eq!(len, expected);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(1., 0., 1., 0.)]
|
|
#[case(3., 0., 1., 0.)]
|
|
#[case(3., 4., 3. / 5., 4. / 5.)]
|
|
pub fn should_normalize_correctly(
|
|
#[case] x: f64,
|
|
#[case] y: f64,
|
|
#[case] expected_x: f64,
|
|
#[case] expected_y: f64,
|
|
) {
|
|
let mut vector = Vector { x, y };
|
|
let expected = Vector {
|
|
x: expected_x,
|
|
y: expected_y,
|
|
};
|
|
vector.normalize();
|
|
assert_eq!(vector, expected);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(Vector::new(1., 1.), Vector::new(2., 2.), 0.)]
|
|
#[case(Vector::new(1., 0.), Vector::new(1., 1.), 0.79)]
|
|
pub fn should_calculate_angle_correctly(
|
|
#[case] vector_a: Vector,
|
|
#[case] vector_b: Vector,
|
|
#[case] expected_angle: f64,
|
|
) {
|
|
let res = vector_a.angle(&vector_b);
|
|
assert_eq!(res, expected_angle);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(Vector::new(1., 0.), Vector::new(0., -1.))]
|
|
#[case(Vector::new(0., 1.), Vector::new(1., 0.))]
|
|
#[case(Vector::new(7., 7.), Vector::new(7., -7.))]
|
|
pub fn should_get_orthogonal_clockwise(#[case] mut vector: Vector, #[case] expected: Vector) {
|
|
vector.orthogonal_clockwise();
|
|
assert_eq!(vector, expected);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(Vector::new(0., -1.), Vector::new(1., 0.))]
|
|
#[case(Vector::new(1., 0.), Vector::new(0., 1.))]
|
|
#[case(Vector::new(7., 7.), Vector::new(-7., 7.))]
|
|
pub fn should_get_orthogonal_counter_clockwise(
|
|
#[case] mut vector: Vector,
|
|
#[case] expected: Vector,
|
|
) {
|
|
vector.orthogonal_counter_clockwise();
|
|
assert_eq!(vector, expected);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(Vector::new(1., 0.), FRAC_PI_4, Vector::unit())]
|
|
pub fn should_correctly_rotate(
|
|
#[case] mut vector: Vector,
|
|
#[case] radians: f64,
|
|
#[case] expected: Vector,
|
|
) {
|
|
vector.rotate(radians);
|
|
assert_eq!(vector, expected);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(Vector::new(1., 0.), Vector::new(1., 0.), 1.)]
|
|
#[case(Vector::new(1., 0.), Vector::new(0., 1.), 0.)]
|
|
#[case(Vector::new(1., 0.), Vector::new(-1., 0.), -1.)]
|
|
pub fn should_calculate_dot_product(
|
|
#[case] mut vector: Vector,
|
|
#[case] mut other: Vector,
|
|
#[case] expected: f64,
|
|
) {
|
|
let dot = vector.dot(&other);
|
|
assert_eq!(dot, expected);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(Vector::new(0., 1.), Vector::new(1., 0.), Vector::new(0., 0.))]
|
|
#[case(Vector::new(1., 0.), Vector::new(1., 0.), Vector::new(1., 0.))]
|
|
#[case(Vector::new(-1., 0.), Vector::new(1., 0.), Vector::new(-1., 0.))]
|
|
#[case(Vector::new(1., 1.), Vector::new(1., 0.), Vector::new(1., 0.))]
|
|
#[case(Vector::new(2., 1.), Vector::new(1., 0.), Vector::new(2., 0.))]
|
|
pub fn should_get_projection(
|
|
#[case] vector: Vector,
|
|
#[case] other: Vector,
|
|
#[case] expected: Vector,
|
|
) {
|
|
let projected = vector.get_projection(&other);
|
|
assert_eq!(projected, expected);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(Vector::new(1., 1.), Vector::new(1., 0.), Vector::new(0., -1.))]
|
|
#[case(Vector::new(-1., -1.), Vector::new(1., 0.), Vector::new(0., 1.))]
|
|
pub fn should_get_opposing_orthogonal(
|
|
#[case] vector: Vector,
|
|
#[case] onto: Vector,
|
|
#[case] expected: Vector,
|
|
) {
|
|
let orthogonal = vector.get_opposing_orthogonal(&onto);
|
|
assert_eq!(orthogonal, expected);
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(Vector::new(1., 1.), Vector::new(1., 0.), Vector::new(1., -1.))]
|
|
#[case(Vector::new(-1., 1.), Vector::new(1., 0.), Vector::new(-1., -1.))]
|
|
#[case(Vector::new(1., -1.), Vector::new(0., 1.), Vector::new(-1., -1.))]
|
|
#[case(Vector::new(-1., -1.), Vector::new(0., 1.), Vector::new(1., -1.))]
|
|
pub fn should_reflect_vector(
|
|
#[case] mut vector: Vector,
|
|
#[case] onto: Vector,
|
|
#[case] expected: Vector,
|
|
) {
|
|
vector.reflect(&onto);
|
|
assert_eq!(vector, expected);
|
|
}
|