Added the ability for vectors to use assignment operators.

This added the AddAssign, SubAssign, MulAssign, DivAssign, and RemAssign.
This needs to be looked at a little further to see if the other functions
need to removed now.
This commit is contained in:
Jason Smith
2016-05-12 15:49:24 -04:00
parent a618fb27f7
commit 0b7a338572
3 changed files with 318 additions and 4 deletions

View File

@ -1,6 +1,7 @@
extern crate sigils;
use std::ops::{Add, Sub, Mul, Div, Rem};
use std::ops::{AddAssign, SubAssign, MulAssign, DivAssign, RemAssign};
use sigils::vector::*;
@ -356,3 +357,258 @@ fn vector_rem()
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
}
#[test]
fn vector_add_assign()
{
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 mut v_three = v.clone();
v_three.add_assign(&v_two);
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three.add_assign(v_two);
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three += &v_two;
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three += v_two;
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three += 4.0f32;
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three += scalar;
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three += &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_assign()
{
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 mut v_three = v.clone();
v_three.sub_assign(&v_two);
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three.sub_assign(v_two);
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three -= &v_two;
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three -= v_two;
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three -= 4.0f32;
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three -= scalar;
assert_eq!(v_three.x, 5.0f32);
assert_eq!(v_three.y, 5.0f32);
assert_eq!(v_three.z, 5.0f32);
let mut v_three = v.clone();
v_three -= &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_assign()
{
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 mut v_three = v.clone();
v_three.mul_assign(&v_two);
assert_eq!(v_three.x, 15.0f32);
assert_eq!(v_three.y, 15.0f32);
assert_eq!(v_three.z, 15.0f32);
let mut v_three = v.clone();
v_three.mul_assign(v_two);
assert_eq!(v_three.x, 15.0f32);
assert_eq!(v_three.y, 15.0f32);
assert_eq!(v_three.z, 15.0f32);
let mut v_three = v.clone();
v_three *= &v_two;
assert_eq!(v_three.x, 15.0f32);
assert_eq!(v_three.y, 15.0f32);
assert_eq!(v_three.z, 15.0f32);
let mut v_three = v.clone();
v_three *= v_two;
assert_eq!(v_three.x, 15.0f32);
assert_eq!(v_three.y, 15.0f32);
assert_eq!(v_three.z, 15.0f32);
let mut v_three = v.clone();
v_three *= 5.0f32;
assert_eq!(v_three.x, 15.0f32);
assert_eq!(v_three.y, 15.0f32);
assert_eq!(v_three.z, 15.0f32);
let mut v_three = v.clone();
v_three*= scalar;
assert_eq!(v_three.x, 15.0f32);
assert_eq!(v_three.y, 15.0f32);
assert_eq!(v_three.z, 15.0f32);
let mut v_three = v.clone();
v_three *= &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_assign()
{
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 mut v_three = v.clone();
v_three.div_assign(&v_two);
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three.div_assign(v_two);
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three /= &v_two;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three /= v_two;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three /= 5.0f32;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three /= scalar;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three /= &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_assign()
{
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 mut v_three = v.clone();
v_three.rem_assign(&v_two);
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three.rem_assign(v_two);
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three %= &v_two;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three %= v_two;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three %= 6.0f32;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three %= scalar;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
let mut v_three = v.clone();
v_three %= &scalar;
assert_eq!(v_three.x, 3.0f32);
assert_eq!(v_three.y, 3.0f32);
assert_eq!(v_three.z, 3.0f32);
}