Finished the Vector definition.
This complete what is needed for the definition of Vector2, Vector3, and Vector4. This required a trigonometry section, fleshing out the rest of the Number, ToNumber, and FromNumber section, correctly defining all the available function for the Real trait, and defining several constants.
This commit is contained in:
97
tests/constants.rs
Normal file
97
tests/constants.rs
Normal file
@ -0,0 +1,97 @@
|
||||
extern crate sigils;
|
||||
|
||||
use std::{f32, f64};
|
||||
use sigils::Constants;
|
||||
|
||||
|
||||
#[test]
|
||||
fn constant_check_f32()
|
||||
{
|
||||
let val: f32 = Constants::SQRT_2;
|
||||
assert_eq!(val, f32::consts::SQRT_2);
|
||||
let val: f32 = Constants::SQRT_3;
|
||||
assert_eq!(val, 1.73205080756887729352f32);
|
||||
let val: f32 = Constants::INVERSE_SQRT_2;
|
||||
assert_eq!(val, 1.0f32 / f32::consts::SQRT_2);
|
||||
let val: f32 = Constants::INVERSE_SQRT_3;
|
||||
assert_eq!(val, 1.0f32 / 1.73205080756887729352f32);
|
||||
|
||||
let val: f32 = Constants::E;
|
||||
assert_eq!(val, f32::consts::E);
|
||||
|
||||
let val: f32 = Constants::LOG2_E;
|
||||
assert_eq!(val, f32::consts::LOG2_E);
|
||||
let val: f32 = Constants::LOG10_E;
|
||||
assert_eq!(val, f32::consts::LOG10_E);
|
||||
let val: f32 = Constants::LOGE_2;
|
||||
assert_eq!(val, 2f32.ln());
|
||||
let val: f32 = Constants::LOGE_10;
|
||||
assert_eq!(val, 10f32.ln());
|
||||
|
||||
let val: f32 = Constants::TWO_PI;
|
||||
assert_eq!(val, 2f32 * f32::consts::PI);
|
||||
let val: f32 = Constants::PI;
|
||||
assert_eq!(val, f32::consts::PI);
|
||||
let val: f32 = Constants::HALF_PI;
|
||||
assert_eq!(val, f32::consts::PI / 2f32);
|
||||
let val: f32 = Constants::THIRD_PI;
|
||||
assert_eq!(val, f32::consts::PI / 3f32);
|
||||
let val: f32 = Constants::QUARTER_PI;
|
||||
assert_eq!(val, f32::consts::PI / 4f32);
|
||||
let val: f32 = Constants::SIXTH_PI;
|
||||
assert_eq!(val, f32::consts::PI / 6f32);
|
||||
let val: f32 = Constants::EIGHTH_PI;
|
||||
assert_eq!(val, f32::consts::PI / 8f32);
|
||||
let val: f32 = Constants::INVERSE_PI;
|
||||
assert_eq!(val, 1.0f32 / f32::consts::PI);
|
||||
let val: f32 = Constants::TWO_INVERSE_PI;
|
||||
assert_eq!(val, 2.0f32 / f32::consts::PI);
|
||||
let val: f32 = Constants::TWO_INVERSE_SQRT_PI;
|
||||
assert_eq!(val, 2.0f32 / (f32::consts::PI).sqrt());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn constant_check_f64()
|
||||
{
|
||||
let val: f64 = Constants::SQRT_2;
|
||||
assert_eq!(val, f64::consts::SQRT_2);
|
||||
let val: f64 = Constants::SQRT_3;
|
||||
assert_eq!(val, 1.73205080756887729352f64);
|
||||
let val: f64 = Constants::INVERSE_SQRT_2;
|
||||
assert_eq!(val, 1.0f64 / f64::consts::SQRT_2);
|
||||
let val: f64 = Constants::INVERSE_SQRT_3;
|
||||
assert_eq!(val, 1.0f64 / 1.73205080756887729352f64);
|
||||
|
||||
let val: f64 = Constants::E;
|
||||
assert_eq!(val, f64::consts::E);
|
||||
|
||||
let val: f64 = Constants::LOG2_E;
|
||||
assert_eq!(val, f64::consts::LOG2_E);
|
||||
let val: f64 = Constants::LOG10_E;
|
||||
assert_eq!(val, f64::consts::LOG10_E);
|
||||
let val: f64 = Constants::LOGE_2;
|
||||
assert_eq!(val, 2f64.ln());
|
||||
let val: f64 = Constants::LOGE_10;
|
||||
assert_eq!(val, 10f64.ln());
|
||||
|
||||
let val: f64 = Constants::TWO_PI;
|
||||
assert_eq!(val, 2f64 * f64::consts::PI);
|
||||
let val: f64 = Constants::PI;
|
||||
assert_eq!(val, f64::consts::PI);
|
||||
let val: f64 = Constants::HALF_PI;
|
||||
assert_eq!(val, f64::consts::PI / 2f64);
|
||||
let val: f64 = Constants::THIRD_PI;
|
||||
assert_eq!(val, f64::consts::PI / 3f64);
|
||||
let val: f64 = Constants::QUARTER_PI;
|
||||
assert_eq!(val, f64::consts::PI / 4f64);
|
||||
let val: f64 = Constants::SIXTH_PI;
|
||||
assert_eq!(val, f64::consts::PI / 6f64);
|
||||
let val: f64 = Constants::EIGHTH_PI;
|
||||
assert_eq!(val, f64::consts::PI / 8f64);
|
||||
let val: f64 = Constants::INVERSE_PI;
|
||||
assert_eq!(val, 1.0f64 / f64::consts::PI);
|
||||
let val: f64 = Constants::TWO_INVERSE_PI;
|
||||
assert_eq!(val, 2.0f64 / f64::consts::PI);
|
||||
let val: f64 = Constants::TWO_INVERSE_SQRT_PI;
|
||||
assert_eq!(val, 2.0f64 / (f64::consts::PI).sqrt());
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
extern crate sigils;
|
||||
|
||||
|
||||
mod constants;
|
||||
mod vector;
|
||||
|
346
tests/vector.rs
346
tests/vector.rs
@ -1,5 +1,6 @@
|
||||
extern crate sigils;
|
||||
|
||||
use std::ops::{Add, Sub, Mul, Div, Rem};
|
||||
use sigils::vector::*;
|
||||
|
||||
|
||||
@ -10,3 +11,348 @@ fn vector_creation()
|
||||
|
||||
assert_eq!(v.x, 1.0f32);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn vector_add()
|
||||
{
|
||||
let v: Vector3<f32> = Vector3::<f32>::from_value(1.0f32);
|
||||
|
||||
let v_two: Vector3<f32> = Vector3::<f32>::from_value(4.0f32);
|
||||
let scalar: f32 = 4.0f32;
|
||||
|
||||
let v_three = v.add(&v_two);
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v.add(v_two);
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v + &v_two;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v + v_two;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v + &v_two;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v + v_two;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v + 4.0f32;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v + 4.0f32;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v + scalar;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v + scalar;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v + &scalar;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v + &scalar;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn vector_sub()
|
||||
{
|
||||
let v: Vector3<f32> = Vector3::<f32>::from_value(9.0f32);
|
||||
|
||||
let v_two: Vector3<f32> = Vector3::<f32>::from_value(4.0f32);
|
||||
let scalar: f32 = 4.0f32;
|
||||
|
||||
let v_three = v.sub(&v_two);
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v.sub(v_two);
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v - &v_two;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v - v_two;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v - &v_two;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v - v_two;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v - 4.0f32;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v - 4.0f32;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v - scalar;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v - scalar;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = &v - &scalar;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
|
||||
let v_three = v - &scalar;
|
||||
assert_eq!(v_three.x, 5.0f32);
|
||||
assert_eq!(v_three.y, 5.0f32);
|
||||
assert_eq!(v_three.z, 5.0f32);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn vector_mul()
|
||||
{
|
||||
let v: Vector3<f32> = Vector3::<f32>::from_value(3.0f32);
|
||||
|
||||
let v_two: Vector3<f32> = Vector3::<f32>::from_value(5.0f32);
|
||||
let scalar: f32 = 5.0f32;
|
||||
|
||||
let v_three = v.mul(&v_two);
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = v.mul(v_two);
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = v * &v_two;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = v * v_two;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = &v * &v_two;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = &v * v_two;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = &v * 5.0f32;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = v * 5.0f32;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = &v * scalar;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = v * scalar;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = &v * &scalar;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
|
||||
let v_three = v * &scalar;
|
||||
assert_eq!(v_three.x, 15.0f32);
|
||||
assert_eq!(v_three.y, 15.0f32);
|
||||
assert_eq!(v_three.z, 15.0f32);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn vector_div()
|
||||
{
|
||||
let v: Vector3<f32> = Vector3::<f32>::from_value(15.0f32);
|
||||
|
||||
let v_two: Vector3<f32> = Vector3::<f32>::from_value(5.0f32);
|
||||
let scalar: f32 = 5.0f32;
|
||||
|
||||
let v_three = v.div(&v_two);
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v.div(v_two);
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v / &v_two;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v / v_two;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v / &v_two;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v / v_two;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v / 5.0f32;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v / 5.0f32;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v / scalar;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v / scalar;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v / &scalar;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v / &scalar;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn vector_rem()
|
||||
{
|
||||
let v: Vector3<f32> = Vector3::<f32>::from_value(15.0f32);
|
||||
|
||||
let v_two: Vector3<f32> = Vector3::<f32>::from_value(6.0f32);
|
||||
let scalar: f32 = 6.0f32;
|
||||
|
||||
let v_three = v.rem(&v_two);
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v.rem(v_two);
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v % &v_two;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v % v_two;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v % &v_two;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v % v_two;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v % 6.0f32;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v % 6.0f32;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v % scalar;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v % scalar;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = &v % &scalar;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
|
||||
let v_three = v % &scalar;
|
||||
assert_eq!(v_three.x, 3.0f32);
|
||||
assert_eq!(v_three.y, 3.0f32);
|
||||
assert_eq!(v_three.z, 3.0f32);
|
||||
}
|
||||
|
Reference in New Issue
Block a user