Add is_zero method to Vector trait

This commit is contained in:
Brendan Zabarauskas 2012-12-24 13:46:25 +10:00
parent dd973d2e49
commit 16e06c3855
5 changed files with 37 additions and 0 deletions

View file

@ -43,6 +43,9 @@ fn test_vec2() {
assert -a == Vec2::new(-1f, -2f);
assert a.neg() == Vec2::new(-1f, -2f);
assert Vec2::new(0f, 0f).is_zero();
assert !Vec2::new(1f, 1f).is_zero();
assert a.mul_t(f1) == Vec2::new( 1.5f, 3.0f);
assert a.div_t(f2) == Vec2::new( 2.0f, 4.0f);
@ -183,6 +186,9 @@ fn test_vec3() {
assert -a == Vec3::new(-1f, -2f, -3f);
assert a.neg() == Vec3::new(-1f, -2f, -3f);
assert Vec3::new(0f, 0f, 0f).is_zero();
assert !Vec3::new(1f, 1f, 1f).is_zero();
assert a.mul_t(f1) == Vec3::new( 1.5f, 3.0f, 4.5f);
assert a.div_t(f2) == Vec3::new( 2.0f, 4.0f, 6.0f);
@ -325,6 +331,9 @@ fn test_vec4() {
assert -a == Vec4::new(-1f, -2f, -3f, -4f);
assert a.neg() == Vec4::new(-1f, -2f, -3f, -4f);
assert Vec4::new(0f, 0f, 0f, 0f).is_zero();
assert !Vec4::new(1f, 1f, 1f, 1f).is_zero();
assert a.mul_t(f1) == Vec4::new( 1.5f, 3.0f, 4.5f, 6.0f);
assert a.div_t(f2) == Vec4::new( 2.0f, 4.0f, 6.0f, 8.0f);

View file

@ -91,6 +91,13 @@ pub trait NumericVector<T>: Vector<T> Neg<self> {
*/
static pure fn zero() -> self;
/**
* # Return value
*
* True if the vector is equal to zero
*/
pure fn is_zero(&self) -> bool;
/**
* # Return value
*

View file

@ -85,6 +85,12 @@ pub impl<T:Copy Number> Vec2<T>: NumericVector<T> {
Number::zero())
}
#[inline(always)]
pure fn is_zero(&self) -> bool {
self[0] == Number::zero() &&
self[1] == Number::zero()
}
#[inline(always)]
pure fn mul_t(&self, value: T) -> Vec2<T> {
Vec2::new(self[0] * value,

View file

@ -89,6 +89,13 @@ pub impl<T:Copy Number> Vec3<T>: NumericVector<T> {
Number::zero())
}
#[inline(always)]
pure fn is_zero(&self) -> bool {
self[0] == Number::zero() &&
self[1] == Number::zero() &&
self[2] == Number::zero()
}
#[inline(always)]
pure fn mul_t(&self, value: T) -> Vec3<T> {
Vec3::new(self[0] * value,

View file

@ -93,6 +93,14 @@ pub impl<T:Copy Number> Vec4<T>: NumericVector<T> {
Number::zero())
}
#[inline(always)]
pure fn is_zero(&self) -> bool {
self[0] == Number::zero() &&
self[1] == Number::zero() &&
self[2] == Number::zero() &&
self[3] == Number::zero()
}
#[inline(always)]
pure fn mul_t(&self, value: T) -> Vec4<T> {
Vec4::new(self[0] * value,