simple_2d_vector 0.2.0

Simple two-dimensional vectors in Rust
Documentation
use std::ops::{Add, Sub};
use crate::{Vector2D, Point2D};

#[test]
fn new_vector() {
	let new_vector = Vector2D::new(
		(0.0, 0.0).into(),
		(0.0, 0.0).into()
	);
	let vector = Vector2D {
		origin: (0.0, 0.0).into(),
		target: (0.0, 0.0).into()
	};
	assert_eq!(vector, new_vector);
}
#[test]
fn zero_vector() {
	let zero_vector = Vector2D::zero();
	let vector = Vector2D::new(
		(0.0, 0.0).into(),
		(0.0, 0.0).into()
	);
	assert_eq!(vector, zero_vector);
}

#[test]
fn null_vector() {
	let null_vector = Vector2D::null((5.0, 5.0).into());
	let vector = Vector2D::new(
		(5.0, 5.0).into(),
		(0.0, 0.0).into()
	);
	assert_eq!(vector, null_vector);
}
#[test]
fn with_absolute_target_vector() {
	let vector = Vector2D::new(
		(5.0, 5.0).into(),
		(5.0, 5.0).into()
	);
	let absolute_target_vector = Vector2D::with_absolute_target(
		(5.0, 5.0).into(),
		(10.0, 10.0).into()
	);
	assert_eq!(vector, absolute_target_vector);
}
#[test]
fn set_origin() {
	let set_origin_vector = Vector2D::zero().set_origin((1.1, 2.2).into());
	let vector = Vector2D::new(
		(1.1, 2.2).into(),
		(0.0, 0.0).into()
	);
	assert_eq!(vector, set_origin_vector);
}
#[test]
fn set_target() {
	let set_target_vector = Vector2D::zero().set_target((1.1, 2.2).into());
	let vector = Vector2D::new(
		(0.0, 0.0).into(),
		(1.1, 2.2).into()
	);
	assert_eq!(vector, set_target_vector);
}
#[test]
fn set_target_absolute() {
	let set_target_vector = Vector2D::null((1.0, 5.0).into()).set_target_absolute((1.1, 2.2).into());
	let vector = Vector2D::new(
		(1.0, 5.0).into(),
		(0.1, -2.8).into()
	);
	assert_eq!(vector, set_target_vector);
}
#[test]
fn display_vector() {
	let vector = Vector2D::new(
		(2.2, 1.1).into(),
		(1.1, 2.2).into()
	);
	assert_eq!(format!("{vector}"), "(2.2,1.1)[1.1,2.2]");
}
#[test]
fn add_vectors() {
	let vector1 = Vector2D::new(
		(10.0, 10.0).into(),
		(10.0, 5.0).into()
	);
	let vector2 = Vector2D::new(
		(10.0, 10.0).into(),
		(5.0, 10.0).into()
	);
	let result_vector = Vector2D::new(
		(10.0, 10.0).into(),
		(15.0, 15.0).into()
	);
	assert_eq!(vector1 + vector2, result_vector);
}
#[test]
fn addition() {
	let vector1 = Vector2D::new(
		(10.0, 10.0).into(),
		(10.0, 5.0).into()
	);
	let vector2 = Vector2D::new(
		(10.0, 10.0).into(),
		(5.0, 10.0).into()
	);
	assert_eq!(vector1 + vector2, vector1.add(vector2));
}
#[test]
fn sub_vectors() {
	let vector1 = Vector2D::new(
		(10.0, 10.0).into(),
		(10.0, 5.0).into()
	);
	let vector2 = Vector2D::new(
		(10.0, 10.0).into(),
		(5.0, 10.0).into()
	);
	let result_vector = Vector2D::new(
		(10.0, 10.0).into(),
		(5.0, -5.0).into()
	);
	assert_eq!(vector1 - vector2, result_vector);
}
#[test]
fn subtraction() {
	let vector1 = Vector2D::new(
		(10.0, 10.0).into(),
		(10.0, 5.0).into()
	);
	let vector2 = Vector2D::new(
		(10.0, 10.0).into(),
		(5.0, 10.0).into()
	);
	assert_eq!(vector1 - vector2, vector1.sub(vector2));
}
#[test]
fn shift_positive() {
	let vector = Vector2D::new(
		(10.0, 10.0).into(),
		(10.0, 5.0).into()
	);
	let tuple = (2u16, 1.25);
	let result_vector = Vector2D::new(
		(12.0, 11.25).into(),
		(10.0, 5.0).into()
	);
	assert_eq!(vector.shift(tuple), result_vector);
}
#[test]
fn shift_negative() {
	let vector = Vector2D::new(
		(10.0, 10.0).into(),
		(10.0, 5.0).into()
	);
	let tuple = (-2i16, -1.25);
	let result_vector = Vector2D::new(
		(8.0, 8.75).into(),
		(10.0, 5.0).into()
	);
	assert_eq!(vector.shift(tuple), result_vector);
}
#[test]
fn shift_mixed() {
	let vector = Vector2D::new(
		(10.0, 10.0).into(),
		(10.0, 5.0).into()
	);
	let tuple = (-2i16, 1.25);
	let result_vector = Vector2D::new(
		(8.0, 11.25).into(),
		(10.0, 5.0).into()
	);
	assert_eq!(vector.shift(tuple), result_vector);
}
#[test]
fn get_magnitude() {
	let error_margin = f64::EPSILON;
	let vector = Vector2D::new(
		(0.0, 0.0).into(),
		(3.0, 4.0).into()
	);
	let magnitude = 5.0;
	assert!((vector.get_magnitude() - magnitude).abs() < error_margin);
}
#[test]
fn get_dot_product() {
	let error_margin = f64::EPSILON;
	let vector1 = Vector2D::new(
		(0.0, 0.0).into(),
		(3.0, 4.0).into()
	);
	let vector2 = Vector2D::new(
		(0.0, 0.0).into(),
		(5.0, 7.0).into()
	);
	let dot_product = 43.0;
	assert!((vector1.dot_product(vector2) - dot_product).abs() < error_margin);
}
#[test]
fn get_angle_between() {
	let vector1 = Vector2D::new(
		(0.0, 0.0).into(),
		(3.0, 4.0).into()
	);
	let vector2 = Vector2D::new(
		(0.0, 0.0).into(),
		(5.0, 7.0).into()
	);
	let angle_between = 0.023_251_623;
	assert_eq!(
		(vector1.get_angle_between(vector2)* 1_000_000_000.0).round() / 1_000_000_000.0,
		angle_between
	);
}
#[test]
fn new_point() {
	let point = Point2D {
		x: 0.0,
		y: 1.1,
	};
	let new_point = Point2D::new(
		0.0, 1.1
	);
	assert_eq!(point, new_point);
}
#[test]
fn zero_point() {
	let point = Point2D::new(
		0.0,
		0.0
	);
	let zero_point = Point2D::zero();
	assert_eq!(point, zero_point);
}
#[test]
fn point_distance() {
	let point1 = Point2D::new(
		0.0,
		0.0
	);
	let point2 = Point2D::new(
		1.0,
		0.0
	);
	let distance = 1.0;
	assert_eq!(point1.get_distance(point2), distance);
}
#[test]
fn to_vector2d() {
	let point1 = Point2D::new(
		0.0,
		0.0
	);
	let point2 = Point2D::new(
		1.0,
		0.0
	);
	let vector = Vector2D::new(
		(0.0,0.0).into(),
		(1.0,0.0).into(),
	);
	assert_eq!(point1.to_vector2d(&point2), vector);
}