From 16e06c3855ccc871e1b2394c6e4a7fd4f9ea51c5 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Mon, 24 Dec 2012 13:46:25 +1000 Subject: [PATCH] Add is_zero method to Vector trait --- src/test/test_vec.rs | 9 +++++++++ src/vec.rs | 7 +++++++ src/vec2.rs | 6 ++++++ src/vec3.rs | 7 +++++++ src/vec4.rs | 8 ++++++++ 5 files changed, 37 insertions(+) diff --git a/src/test/test_vec.rs b/src/test/test_vec.rs index f4993f3..6c440b0 100644 --- a/src/test/test_vec.rs +++ b/src/test/test_vec.rs @@ -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); diff --git a/src/vec.rs b/src/vec.rs index 2a7366b..e5cce18 100644 --- a/src/vec.rs +++ b/src/vec.rs @@ -91,6 +91,13 @@ pub trait NumericVector: Vector Neg { */ static pure fn zero() -> self; + /** + * # Return value + * + * True if the vector is equal to zero + */ + pure fn is_zero(&self) -> bool; + /** * # Return value * diff --git a/src/vec2.rs b/src/vec2.rs index 3660e87..d712f8a 100644 --- a/src/vec2.rs +++ b/src/vec2.rs @@ -85,6 +85,12 @@ pub impl Vec2: NumericVector { 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 { Vec2::new(self[0] * value, diff --git a/src/vec3.rs b/src/vec3.rs index 3ab107d..2dc98e8 100644 --- a/src/vec3.rs +++ b/src/vec3.rs @@ -89,6 +89,13 @@ pub impl Vec3: NumericVector { 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 { Vec3::new(self[0] * value, diff --git a/src/vec4.rs b/src/vec4.rs index 2a55126..6586d7e 100644 --- a/src/vec4.rs +++ b/src/vec4.rs @@ -93,6 +93,14 @@ pub impl Vec4: NumericVector { 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 { Vec4::new(self[0] * value,